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

しかし、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 %>

これを達成するために何をする必要がありますか?

どんな助けでも大歓迎です!ありがとうございました!

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 に答える