2015-03-13 6 views
1

У меня есть две модели, Owner и Dog. Собаки принадлежат Владельцам и Владельцам есть много Собаков.Как аннотировать запрос столбцом из отношения?

Могу ли я запросить владельцев и снабжать их most_food_needed_for_pet, который является food_needed столбец Dog с максимальной 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') 

Но это неправильно помечает каждый владелец с максимальной lifespan, и food_needed первого Dog в базе данных вместо самого длинного живого Dog.

ответ

0
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 }) 

[редактировать удалить голую * в случае поля перекрытия]

+0

я побежал, что и я получаю mysql2: ошибка, проверьте синтаксис около 'AS max_id'. – bab

+0

Что такое SQL, который он генерирует? – smathy