0

我有 4 个模型:transac、transac_data、item、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 %>

但我还需要从“DvdDetails”模型中访问一些信息,该模型是“最远”的 transac。

我意识到做这样的事情不会真正起作用:

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

我需要做什么才能做到这一点?

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

4

1 回答 1

0

实际上,使用Ian White 的 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 :through 关系,来详细解释一下。它甚至在 GitHub 上有一个随附的示例应用程序可供下载和使用。

于 2010-01-28T05:20:33.890 回答