如何解决从关联的模型表中查找具有至少一个关联的所有记录
所以说我有这个:
class Tree < ActiveRecord::Base
has_many :fruits
has_many :flowers
end
class Fruit < ActiveRecord::Base
belongs_to :tree
end
class Flower < ActiveRecord::Base
belongs_to :tree
end
如何进行有效的查询,使所有拥有至少一个Tree
或Flower
实例或两者的Fruit
实例得到?这个想法不是让Tree
和Flower
完全没有的Fruit
。
解决方法
我会使用这样的查询:
Tree.left_joins(:fruits,:flowers).where('fruits.id IS NOT NULL OR flowers.id IS NOT NULL').distinct
它将生成此SQL:
SELECT DISTINCT "trees".* FROM "trees" LEFT OUTER JOIN "fruits" ON "fruits"."tree_id" = "trees"."id" LEFT OUTER JOIN "flowers" ON "flowers"."tree_id" = "trees"."id" WHERE (fruits.id IS NOT NULL OR flowers.id IS NOT NULL)
,
一种非常基本的方法来获取所有至少具有一个Tree
或Flower
的{{1}},就像这样
Fruit
然后是您想要的flowers = Flower.pluck(:tree_id)
fruits = Tree.pluck(:tree_id)
Tree
这将导致对数据库的3个查询,根据您的用例,这可能是问题,也可能不是问题。
一种更高级的方法是执行此操作,这只会导致一个查询。请注意,使用Tree.where(id: [flowers,fruits].flatten)
而非select
可以使Rails最后只发出一个查询。
pluck
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。