【发布时间】:2016-02-16 09:59:48
【问题描述】:
请注意,这不是关于向关联添加 WHERE 条件的问题,而是关于在使用 eager_load 时如何更改 JOIN 子句的相当高级的问题。
假设我有这些模型
class Parent
has_many :children
have_many :grades, through: :children
end
class Child
belongs_to :parent
end
class Grade
belongs_to :child
end
所以要急切地加载我会做的父母:
Parent.eager_load(:grades)
但如果我想要所有的父母 - 但只是像这样急切地加载最高得分:
LEFT OUTER JOIN grades ON grades.child_id = children.id AND grades.level = 'A+'
我尝试过使用includes(:children).joins("LEFT OUTER JOIN grades ON grades.child_id = children.id AND grades.level = 'A+'"),但由于 Rails 不构建关联对象,它会导致对每个父对象进行额外查询。
我没有找到任何关于将 eager_load 与自定义 SQL 字符串一起使用的参考资料,并且在没有更明智的情况下使用 dug through the source。
【问题讨论】:
-
这不是针对实际应用程序,而是出于好奇,如果可能的话。
标签: ruby-on-rails ruby-on-rails-4 activerecord