Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 利用两个关系识别模型实例_Ruby On Rails_Ruby On Rails 3_Activerecord_Associations_Models - Fatal编程技术网

Ruby on rails 利用两个关系识别模型实例

Ruby on rails 利用两个关系识别模型实例,ruby-on-rails,ruby-on-rails-3,activerecord,associations,models,Ruby On Rails,Ruby On Rails 3,Activerecord,Associations,Models,我试图通过一个模型(“包”)与它所属的其他两个模型(“切割”和“动物”)的关系来挑选一个模型(“包”)。虽然有很多包,比如说带有:cut_id 3和许多带有:animal_id 4的包,但应该只有一个同时带有这两个包,我想从中挑出一个并在表中显示它的内容 我试过下面的DIY乱七八糟的东西,但它并没有真正起作用。(cutfind是我创建的一种方法,我知道它可以调用与给定动物相关的所有切割。) 然后我把上面的内容改成这样: <td><%= cut.package_weight %&

我试图通过一个模型(“包”)与它所属的其他两个模型(“切割”和“动物”)的关系来挑选一个模型(“包”)。虽然有很多包,比如说带有:cut_id 3和许多带有:animal_id 4的包,但应该只有一个同时带有这两个包,我想从中挑出一个并在表中显示它的内容

我试过下面的DIY乱七八糟的东西,但它并没有真正起作用。(cutfind是我创建的一种方法,我知道它可以调用与给定动物相关的所有切割。)

然后我把上面的内容改成这样:

<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 %>
lb
cut.id)%>

由于我无法对你的帖子发表评论,我猜: 您有以下体系结构:


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

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
在控制器中,以下行将显示视图中需要的所有记录:

@animal = Animal.includes(:cuts => :package)
然后,您的视图可以缩短为:

<% @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%>

实际上有点不同。动物有许多包裹。包裹属于一种动物。切割没有或不属于任何东西;它们只是手动关联的。(包裹上有cut_id,但visa卡上没有cut_id)。我还没试过。我不知道它的存在。让我试一试。谢谢很抱歉,我编辑了它,因为我尝试了它,但它不起作用(thingy发现了)。请尝试新的。它非常混乱,而且需要大量的数据库:(事实上,我得到了find_by_等的工作。我的主要问题是,即使在我自己动手之前,我也一直在给包装分配一个动物id,所以它总是零。在我创建动物之后,我不得不移动我必须使用的包装创建方法,现在一切都正常了。谢谢你的帮助!嗯,好的。那么实际上,当前的swer没有帮到你。我是Stackoverflow新手。有没有“标准方法”来更改我的答案,以便将来的读者理解它?没有。你的答案很好,我对Stack Overflow也很陌生。我没有使用它的唯一原因是a)模型之间的关系与你建议的不完全一样,b)“按切割查找id”和“动物id”的功能非常有效,看起来更整洁。HTML布局存在潜在问题。表的每一行(tr)应具有相同数量的数据单元(td),但@pset并不能保证每行中的元素数量相同,对吗?因此单元格的数量可能会有所不同。pset实际上每次都是相同的。每个块只是我处理以下事实的老套方法:我得到的是一个(1)个元素的列表,而不是单个元素。我以前使用blank.where时遇到过这个问题(等等),因为它总是返回一个列表,即使它保证(这里)是单个元素。这是为了下面,因为它不允许我在那里添加注释(!?)。所以它不太有效。我现在收到一个错误,说@p(我分配给Package.find_by_cut_id_和_animal_id(cut.id,@animal.id),属于NilClass,这有点奇怪。这可能与架构差异有关吗?
x = Product.select { |product| product.cuts.include?(Cut.find(3)) }.select{ |product| product.animals.include?(Animal.find(4)) }
Product.find_by_product_id_and_animal_id() 
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
@animal = Animal.includes(:cuts => :package)
<% @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%>