سؤال

لدي 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 %>

ماذا علي أن أفعل لإنجاز هذا؟

أي مساعدة موضع تقدير! شكرًا لك!

هل كانت مفيدة؟

المحلول

في الواقع ، مع Ian White's NETTE_HAS_MANY_THROUGH البرنامج المساعد, ، يمكنك من خلال سلسلة daisy 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