Вопрос имеет много ответов.
Легко найти все вопросы, на которые были даны ответы, и упорядочить их по последнему ответу:
def self.answered
joins(:answers).order('answers.created_at desc')
end
В контроллере я бы сделал @answered = Question.answered
Но это возвращает повторяющиеся записи, если на вопрос был дан ответ более одного раза.
С другой стороны, легко найти отдельные вопросы, на которые были даны ответы, но только если я не пытаюсь упорядочить их по ответам дате создания:
def self.answered
joins(:answers).select("DISTINCT questions.title")
end
(Давайте просто предположим, что заголовки вопросов проверяются на уникальность, поэтому в результате получаются все уникальные записи).
Проблема:
Этот запрос нельзя упорядочить по дате ответа "created_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 заканчиваются. Как выбрать отдельные вопросы (только те, на которые есть ответы) и упорядочить их в порядке убывания по дате создания последнего ответа?
Я хотел бы написать это, используя запросы Active Record Rails 3, но прямой SQL в порядке. Я надеюсь, что кто-то может помочь.