我一直试图解决这个问题一段时间没有成功:(
我有2个模型类--ConfigurationKey和ConfigurationItem,如下所示:
class ConfigurationKey < ActiveRecord::Base
has_many :configuration_items
# this class also has a 'name' attribute
end
class ConfigurationItem < ActiveRecord::Base
belongs_to :app
belongs_to :configuration_key
end
我想在一个查询中获取具有特定“name”属性的所有ConfigurationKeys以及其关联的ConfigurationItems的过滤子集。
我使用了以下命令:
configuration_key = ConfigurationKey.includes(:configuration_items).where(name: key_name, configuration_items: { app: [nil, app] })
但不返回没有任何关联ConfigurationItem的ConfigurationKeys。
我认为'includes'子句,或明确使用'LEFT OUTER JOIN'会使它工作,但它没有:/
有没有可行的方法,或者我必须使用2个查询 - 一个用于获取所有相关的ConfigurationKeys,另一个用于获取所有相关的ConfigurationItems?
谢谢;)
答案 0 :(得分:0)
在rails 4.2中使用includes
和where
子句生成LEFT OUTER JOIN查询。
请查看rails console
中生成的sql。
$ rails c
> ConfigurationKey.includes(:configuration_items).where(name: key_name, configuration_items: { app: [nil, app] })
# Sql is displayed...
可能你会看到LEFT OUTER JOIN
ed sql,如果是的话,它是正确的。
请注意,通过ActiveRecord获得的内容不等于sql的结果。它从sql返回DISTINCT
个结果。
所以,我认为在一个查询中取得成功是不可能的。