如何正确使用包括解决N + 1轨道

时间:2017-08-20 14:45:00

标签: ruby-on-rails eager-loading nested-includes

我有3个型号:

1)ContentType(父级)

2)RecentTools(ContentType的最后3个子项,model是Tool,recent_tools只是使用工具范围的关联)

3)ToolTranslation(工具的孩子)

我想解决我的n + 1,并为此编写包含。现在我被困了:

ContentType.includes(recent_tools: :tool_translation)

我觉得这应该适用于指南,但这包括总是返回完整的工具列表,而不是recent_tools,以及它们的所有翻译。

这是我的工具.rb

class Tool < ApplicationRecord
  has_one :tool_translation, -> { where(locale: I18n.locale) }, dependent: :destroy

  belongs_to :content_type

  scope :recent, ->(number){ limit(number) }
end

和content_type模型:

class ContentType < ApplicationRecord
  has_many :tools, dependent: :destroy
  has_many :recent_tools, -> { recent(3) }, class_name: "Tool"
end

我失踪的地方?谁能解释一下?也许这是一个错误的逻辑来获得最近的工具(它需要因为我只需要在主页上的3个最后一个content_type工具)?我该怎么写正确的包含?谢谢!

1 个答案:

答案 0 :(得分:0)

希望这会起作用

ContentType.includes(:recent_tools, recent_tools: :tool_translation)

如果没有,请告诉我。