2014-01-17 7 views
3

Я пытаюсь создать запрос в postgres используя (rails) activerecord, но, похоже, не может его решить.Получить последние записи отношения has_many

Компания имеет много страниц, и я пытаюсь получить последнюю страницу всех компаний.

Я попытался

Page.select('DISTINCT company_id') 

, который дает мне 1 страница всех компаний. Но это не последняя (created_at ASC)

Так что я попытался

Page.select('DISTINCT company_id').order('created_at ASC') 

, который дает ошибку, так как создается на нет в избранных. Но если я его добавлю, я верну все возвращенные записи.

Так что я попытался

Page.group('company_id').select('company_id').order('created_at ASC') 

Но это дает ошибку, что created_at должно быть в группе или функция агрегатора.

добавления created_at к группе, дает нежелательный результат (несколько страниц, одной и той же компании)

Любая помощь?

редактировать:

Мне нравится быть рамки, мне нужно приковать осциллографы позже.

ответ

2

Вы можете использовать pluck и uniq:

Page.order('created_at ASC').pluck(:company_id).uniq 

Вы могли бы попробовать это, чтобы получить ActiveRecord::Relation:

Page.select('max(id) as id, company_id').group(:company_id) 

I Would используйте id, чтобы определить «недавнюю» страницу вместо created_at. Чем выше значение id, тем более поздняя страница. Вы можете просто получить самую высокую страницу id за company_id с кодом выше.

+0

Мне нравится создавать область действия (так что она возвращает отношение activerecord), поэтому я могу ее связать. В основном я хочу, например, page.unique_for_companies.active или что-то подобное – Jareish

+0

Хорошо, я обновлю свой ответ. Затем вы должны использовать 'group' и агрегатную функцию на' created_at'. – Mischa

+0

@ Миша, я не уверен в вашем решении. так как это даст уникальную company_ids из таблицы страниц. он не будет предоставлять последние созданные страницы для каждой компании –

Смежные вопросы