【发布时间】:2012-09-24 21:05:57
【问题描述】:
我试图通过它与它所属的其他两个模型(“Cut”和“Animal”)的关系来挑选一个模型(“Package”)的实例。虽然有许多带有 :cut_id 3 的包和许多带有 :animal_id 4 的包,但应该只有一个带有这两者,我想挑选一个并在表格中显示它的内容。
我尝试了以下 DIY 混乱,但它并没有真正起作用。 (cutfind 是我创建的一种方法,我知道它可以调用与给定动物相关的所有切割。)
<% @animal.cutfind.each do |cut| %>
<tr>
<td><%= cut.name %></td>
<td><%= number_to_currency(cut.price) %></td>
<td><%= cut.package_weight %> lb</td>
<% @a = Package.where(:animal_id => @animal.id) %>
<% @pset = @a.where(:cut_id => cut.id) %>
<% @pset.each do |p| %>
<td><%= p.original %></td>
<td><%= p.left %></td>
<% end %>
</tr>
<%end%>
知道如何[更好地]做到这一点吗?谢谢。
更新:我尝试了这个其他 DIY 混乱并且遇到了同样的问题(甚至没有创建单元格,这让我相信 @pset 是空的)。
这是在我的动物模型中:
def packagefind
Package.where(:animal_id => self.id)
end
然后我像这样更改了上面的内容:
<td><%= cut.package_weight %> lb</td>
<% @pset = @animal.packagefind.where(:cut_id => cut.id) %>
<% @pset.each do |p| %>
<td><%= p.original %></td>
<td><%= p.left %></td>
<% end %>
【问题讨论】:
-
您的 HTML 布局存在潜在问题。表的每一行 (tr) 应该具有相同数量的数据单元 (td),但不能保证 @pset 在每行中具有相同数量的元素,对吧?因此单元格的数量可能会有所不同。
-
Pset 实际上每次都是一样的。 each 块只是我处理我得到 (1) 个元素列表而不是单个元素的事实的 hacky 方式。我之前在使用blank.where(etc) 时遇到过这个问题,因为它总是返回一个列表,即使它被保证(如这里)是单个元素。
-
这是为下面的,因为它不会让我在那里添加 cmets (!?)。所以它并不完全奏效。我现在收到一条错误消息,指出@p(我分配给 Package.find_by_cut_id_and_animal_id(cut.id, @animal.id) 属于 NilClass,这有点奇怪。这可能与架构差异有关吗?跨度>
标签: ruby-on-rails ruby-on-rails-3 activerecord associations models