有很多通过反向?

时间:2013-10-04 02:02:39

标签: mysql ruby-on-rails join ruby-on-rails-4 rails-activerecord

我有一组模型,与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()或其他东西做到这一点?处理像这样的协会的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

在你的控制器中,假设你正在查询一系列文件。然后,使用includes急切加载您正在经历的两个关联非常重要:

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

然后在你看来,你可以做到这一点,而不用担心做太多的查询:

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

如果您想使用delegate使其更清晰并且能够写出paragraph.document,您仍然可以从急切的加载中受益。