我有两个模型,Owner
和 Dog
。狗属于主人,主人有很多狗。
我可以查询 Owners 并用 most_food_needed_for_pet
注释它们吗,它是 Dog
的 food_needed
列,具有最大 lifespan
?我知道我可以通过多个查询来完成此操作,但我认为这应该可以通过使用 Arel
的一个查询来实现。
我最初的尝试是
Owner.
joins(:dogs).
select(Dog.arel_table[:food_needed].as('most_food_needed_for_pet')).
select(Dog.arel_table[:lifespan].maximum).
group('dogs.owner_id')
但这错误地用数据库中第一只 Dog
的最大 lifespan
和 food_needed
而非最长寿的来注释每个所有者狗
。
最佳答案
d = Dog.arel_table
o = Owner.arel_table
Owner.
select( o[Arel.star], d[:lifespan], d[:food_needed].as('most_food_needed_for_pet')).
joins(:dogs).
group(:owner_id).
having( dogs: { lifespan: d[:lifespan].maximum } )
[编辑以在字段重叠的情况下删除裸*
]
关于mysql - 如何使用关系中的列注释查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29024952/