我有一组模型,与railsguides中的示例完全相同:
class Document < ActiveRecord::Base
has_many :sections
has_many :paragraphs, through: :sections
end
class Section < ActiveRecord::Base
belongs_to :document
has_many :paragraphs
end
class Paragraph < ActiveRecord::Base
belongs_to :section
end
他们提到你可以这样做@document.paragraphs
,它使用JOIN,但你不能反向... @paragraph.document
只是不起作用。我知道使用delegate
,但它仍使用相同数量的查询。
有没有办法可以用join()或includes()或其他东西做到这一点?处理像这样的协会的最佳方法是什么?
答案 0 :(得分:0)
在你的控制器中,假设你正在查询一系列文件。然后,使用includes
急切加载您正在经历的两个关联非常重要:
@paragraphs = Paragraph.includes(:section => :document).where(:attribute => attribute)
然后在你看来,你可以做到这一点,而不用担心做太多的查询:
<% @paragraphs.each do |paragraph| %>
<%= paragraph.section.document %>
<% end %>
如果您想使用delegate
使其更清晰并且能够写出paragraph.document
,您仍然可以从急切的加载中受益。