gpt4 book ai didi

ruby-on-rails - 通过两个关系识别模型实例

转载 作者:行者123 更新时间:2023-12-02 05:29:44 26 4
gpt4 key购买 nike

我试图根据模型(“包”)与它所属的其他两个模型(“Cut”和“Animal”)的关系来挑选模型实例。虽然有很多包带有 :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 %>

最佳答案

如果您定义以下关系,Rails 将自动生成方法来帮助您查找相关记录:

class Animal
has_many :cuts
has_many :packages, :through => :cuts
end

class Cut
belongs_to :animal
belongs_to :package
end

class Package
has_many :cuts
has_many :animals, :through => :cuts
end

在您的 Controller 中,以下行将 eager load您将在 View 中需要的所有记录:

@animal = Animal.includes(:cuts => :package)

然后您的 View 可以缩短为:

<% @animal.cuts.each do |cut| %>
<tr>
<td><%= cut.name %></td>
<td><%= number_to_currency(cut.price) %></td>
<td><%= cut.package_weight %> lb</td>
<td><%= cut.package.original %></td>
<td><%= cut.package.left %></td>
</tr>
<%end%>

关于ruby-on-rails - 通过两个关系识别模型实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12572929/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com