2014-11-12 5 views
0

У меня есть Question.rb (has_one: answer) и Answer.rb (принадлежит: вопрос).Поиск там, где нет .join

Я хотел бы вывести в поле зрения количество оставшихся без ответа вопросов. Я думаю, что это было бы что-то вроде:

Question.where(answer.blank?) 

или

Question.notJoin(:answers)

Я знаю, что мой синтаксис далеко, и я не слишком уверен, что если это будет модель сфера или контроллер переменная экземпляра, но я не понимаю, почему это было бы непросто выполнить с помощью рельсов.

Может ли кто-нибудь указать мне в правильном направлении здесь - я бы очень признателен.

ответ

2

Вы можете использовать left join между questions и answers следующим образом:

Question.joins(
    'left join answers on questions.id = answers.question_id' 
).where(answer: { id: nil }) 

Это даст вам все вопросы, которые не имеют ответа.

Вы можете разместить этот запрос в области видимости или методе класса или использовать его в методе. Это действительно ваш выбор.

1

Вы также можете добавить кэш-счетчик ответов к Вопросу, а затем выбрать на основе этого.

class Answer < ActiveRecord::Base 

    belongs_to :question, :counter_cache => true 

Затем добавить область к вопросу

scope :no_answers, -> { where(:answers_count => 0) } 

Затем он читает большой

Question.no_answers 
Смежные вопросы