3

我有一组与 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,但它仍然使用相同数量的查询。

有没有办法我可以用 joins() 或 includes() 或其他东西来做到这一点?处理这样的关联的最佳方法是什么?

4

1 回答 1

0

在您的控制器中,假设您正在查询一组文档。然后,重要的是您使用includes急切加载您正在经历的两个关联:

@paragraphs = Paragraph.includes(:section => :document).where(:attribute => attribute)

然后在您看来,您可以这样做而不必担心执行太多查询:

<% @paragraphs.each do |paragraph| %>
  <%= paragraph.section.document %>
<% end %>

如果您想使用delegate它使其更清洁并能够编写paragraph.document,您仍然会从急切加载中受益。

于 2013-10-04T02:41:51.803 回答