Вопрос имеет много ответов.
Легко найти все вопросы, на которые даны ответы, и заказать их по новейшему ответу:
def self.answered
joins(:answers).order('answers.created_at desc')
end
В контроллере, я бы сделал @ отвечено = вопрос.отвечено
Но это возвращает дубликаты записей, если на вопрос был дан ответ более одного раза.
С другой стороны, легко найти отдельные вопросы, на которые даны ответы, но только если я не попытаюсь упорядочить их по их ответам дата создания:
def self.answered
joins(:answers).select("DISTINCT questions.title")
end
(Давайте просто предположим, что заголовки вопросов проверяются на уникальность, поэтому в результате получаются все уникальные записи).
Проблема:
Этот запрос не может быть упорядочен к дате ответа"create_at", потому что я выбрал только заголовок вопроса в своем операторе выбора SQL ...
def self.answered
joins(:answers).select("DISTINCT questions.title").order('answers.created_at desc')
end
приводит к этой ошибке (я использую Postgres):
PGError: ERROR: for SELECT DISTINCT, ORDER BY expressions must appear in select list
Я думаю, это означает, что он хочет видеть "answers.created_at" в этом операторе select DISTINCT.
Похоже, что это сработает, если я захочу заказать по questions.created_at, но это не то, что я хочу:
def self.answered
joins(:answers).select("DISTINCT(questions.title), questions.created_at").order('questions.created_at desc')
end
Здесь мои базовые знания SQL заканчиваются. Как выбрать отдельные вопросы (только те, на которые есть ответы) и упорядочить их в порядке убывания к дате их последнего ответа create_at?
Я хотел бы написать это с помощью запросов Rails 3 Active Record, но прямой SQL подойдет. Я надеюсь, что кто-то может помочь.