问题描述
我有一个表格,可以创建一个新护士,下面是一个链接列表,这些链接是从现有护士创建的。该列表在第一次加载时呈现良好,但在表单保存失败后,我收到一条错误消息,表明我缺少链接的nurse_id 部分:
没有路由匹配 {:action=>"update",:controller=>"connect_rankings",:first=>"Wada",:holiday_schedule_id=>6,:id=>nil,:last=>"Lotta" },可能的不匹配约束:[:id]
<ul>
<% @nurses.each do |nurse| %>
<li>
<%= link_to "#{nurse.first} #{nurse.last}",holiday_schedule_connect_ranking_path(@holiday_schedule.id,nurse.id,first: @nurse.first,last: @nurse.last),method: :patch %>
</li>
<% end %>
</ul>
这段代码在重新渲染时确实有效,所以我认为它一定与循环有关:
<ul>
<% nurse = @nurses.first %>
<li>
<%= link_to "#{nurse.first} #{nurse.last}",method: :patch %>
</li>
</ul>
以防万一,这里是相关的控制器操作。
def new
@holiday_schedule = HolidaySchedule.find(params[:holiday_schedule_id])
@nurses = @holiday_schedule.shift.nurses
@nurse = Nurse.new(first: params[:first],last: params[:last])
end
def create
@holiday_schedule = HolidaySchedule.find(params[:holiday_schedule_id])
@shift = @holiday_schedule.shift
@nurses = @shift.nurses
@nurse = @shift.nurses.build(nurse_params)
respond_to do |format|
if @nurse.save
@disconnected_rankings = @holiday_schedule.rankings.where('first = ? AND last = ?',@nurse.first,@nurse.last)
@nurse.connect_rankings(@disconnected_rankings);
format.html { redirect_to shift_path(@shift),notice: 'Set of rankings resolved.' }
format.json { redirect_to shift_path(@shift),notice: 'Set of rankings resolved.' }
else
format.html { render :new }
format.json { redirect_back fallback_location: root_path,notice: "Nurse Couldn't be saved." }
end
end
end
任何帮助将不胜感激。
解决方法
尽管护士构建在创建中失败,但它仍然是护士集合的可迭代部分。当循环尝试将构建转换为链接时,会发生错误,因为未保存的护士对象没有 id。 解决方案是检查循环中的持久性:
<ul>
<% @nurses.each do |nurse| %>
<% if nurse.persisted? %>
<li>
<%= link_to "#{nurse.first} #{nurse.last}",holiday_schedule_connect_ranking_path(params[:holiday_schedule_id],nurse.id,first: @nurse.first,last: @nurse.last),method: :patch %>
</li>
<% end %>
<% end %>
</ul>