我有4个模型:TRANSAC,transac_data,项,dvd_details

class Transac < ActiveRecord::Base
  has_many :transac_datas
  has_many   :items, :through => :transaction_datas
end

class TransactionData < ActiveRecord::Base
  belongs_to :item
  belongs_to :transaction
end

class Item < ActiveRecord::Base
  has_many   :transaction_datas
  has_many   :transacs, :through => :transaction_datas
end

class DvdDetails < ActiveRecord::Base
  has_many :items
end

现在,在“TRANSAC”的说法,我需要访问的东西从所有这些车型,如:

<td><%=h transac.status %></td>
<% transac.transaction_datas.each do |td| %>
  <td><%=h td.item_type %></td>
<% end %>

<% transac.items.each do |item| %>
  <td><%=h item.item_type %></td>
<% end %>

,但我也需要存取从作为“最远”远离TRANSAC了“DvdDetails”模型的一些信息。

我意识到,做这样的事情不会真的工作:

class Transac < ActiveRecord::Base
  has_many :transac_datas
  has_many :items, :through => :transaction_datas
  has_many :dvd_details, :through => :items, :through => :transaction_datas
end

和为此在索引“TRANSAC”视图

<%=h transac.dvd_details.name %>

什么我需要做的做到这一点?

任何帮助表示赞赏! 谢谢!

有帮助吗?

解决方案

其实,与伊恩·怀特的nested_has_many_through插件,则可以菊花链的has_many得来你想要的方式。刚安装插件,像这样:

script/plugin install git://github.com/ianwhite/nested_has_many_through.git

然后被设定的模型是这样的:

class Transac < ActiveRecord::Base
  has_many :transaction_datas
  has_many :items, :through => :transaction_datas
  has_many :dvd_details, :through => :items
end

这应该做你所需要的。

更新:这个问题已经拿出了几次最近。我写了一篇文章,嵌套您的has_many:通过关系中详细讲解。它甚至有在GitHub到下载伴随的示例应用程序和玩。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top