Rails 3.2
我认为我有以下内容:
<% @organizations.each do |o| %>
<% organization = Organization.find(o.organization_id) %>
<% if organization == nil %>
<% next %>
<% end %>
<tr>
<td><%= o.org_name %></td>
<td><%= number_to_currency(o.revenue, :precision => 0) %></td>
<td><%= o.rank %></td>
</tr>
<% end %>
我的印象是,如果找不到组织,执行将跳转到下一条记录。相反,我得到了&#34;出了问题&#34;。
查看日志文件,组织表中找不到organization_id之一,这是触发错误的原因。
为什么执行没有跳到下一条记录?
临时解决方案:我改变了
<% organization = Organization.find(o.organization_id) %>
要:
<% organization = Organization.find_by_id(o.organization_id) %>
当它找不到任何东西时,这给了我一个零。如果它为零,则执行跳到下一条记录
答案 0 :(得分:2)
根据http://api.rubyonrails.org/classes/ActiveRecord/FinderMethods.html#method-i-find,Organization.find(o.organization_id)
会为表格中不存在的ID引发ActiveRecord::RecordNotFound
。
附录:
尝试以下内容:
<% ids = @organizations.map(&:organization_id) %>
<% organizations = Organization.where(id: ids) %>
<% organizations.each do |o| %>
<tr>
<td><%= o.org_name %></td>
<td><%= number_to_currency(o.revenue, :precision => 0) %></td>
<td><%= o.rank %></td>
</tr>
<% end %>
使用此方法,您将从DB获取所有具有1个查询的组织,而不是每个组织获取1个。