relación rails has_many (4 modelos) y cómo acceder en la vista
-
23-09-2019 - |
Pregunta
Tengo 4 modelos:transac, transac_data, artículo, 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
Ahora, en la vista "transac", necesito acceder a elementos de todos estos modelos como:
<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 %>
PERO también necesito acceder a información del modelo "DvdDetails", que es el "más alejado" de Transac.
Me di cuenta de que hacer algo como esto realmente no funcionaría:
class Transac < ActiveRecord::Base
has_many :transac_datas
has_many :items, :through => :transaction_datas
has_many :dvd_details, :through => :items, :through => :transaction_datas
end
y haz esto en el índice de la vista "transac"
<%=h transac.dvd_details.name %>
¿Qué necesito hacer para lograr esto?
¡Cualquier ayuda es apreciada!¡Gracias!
Solución
En realidad, la Ian White throughs la forma que desee . Sólo tiene que instalar el plugin de este modo:
script/plugin install git://github.com/ianwhite/nested_has_many_through.git
A continuación, la configuración de su modelo como este:
class Transac < ActiveRecord::Base
has_many :transaction_datas
has_many :items, :through => :transaction_datas
has_many :dvd_details, :through => :items
end
Esto debería hacer lo que necesita.
ACTUALIZACIÓN: Esta cuestión se ha planteado un par de veces recientemente. Escribí un artículo, anidación su has_many: a través de relaciones , para explicar en detalle. Incluso tiene una aplicación de ejemplo que acompaña en GitHub para descargar y jugar.