我有 3 个模型:
1)内容类型(父)
2)RecentTools(ContentType的最后3个孩子,模型是工具,recent_tools只是使用工具范围的关联)
3)ToolTranslation(工具的孩子)
我想解决我的 n+1,并为此编写包含。现在我卡住了:
ContentType.includes(recent_tools: :tool_translation)
根据指南,我猜这应该可以工作,但这包括总是返回一个完整的工具列表,而不是最近的工具,以及它们的所有翻译。
这是我的工具.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 工具)?我应该如何正确编写包含?谢谢!