Domanda

Ho 4 modelli:transac, transac_data, elemento, 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

Ora nel "transac" vedi, ho bisogno di accedere roba da tutti questi modelli, come:

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

MA ho anche bisogno di accedere ad alcune informazioni da "DvdDetails" modello "più lontana" lontano da transac.

Ho capito che fa qualcosa di simile, non sarebbe davvero il lavoro:

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

e per fare questo l'indice di "transac" vista

<%=h transac.dvd_details.name %>

Cosa devo fare per ottenere questo?

Qualsiasi aiuto è gradito!Grazie!

È stato utile?

Soluzione

In realtà, con Ian White nested_has_many_through plugin, è possibile collegare in daisy-chain has_many through modo che si desidera.Basta installare il plugin in questo modo:

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

Quindi impostare il vostro modello come questo:

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

Questo dovrebbe fare quello di cui hai bisogno.

AGGIORNAMENTO: Questa domanda è venuto un paio di volte di recente.Ho scritto un articolo, nidificazione tuo has_many :attraverso le relazioni, per spiegare in dettaglio.È dotato anche di un accompagnamento esempio di applicazione su GitHub per scaricare e giocare con.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top