Как получить данные из 2 таблиц? - PullRequest
1 голос
/ 30 мая 2011

Я хочу получить id респондентов, которые не ответили ни на один вопрос.Как мне это сделать?

Ниже приведены мои модели и их связи друг с другом.

Модель ответа (поля: id, query_id, text):

class Answer < ActiveRecord::Base
  belongs_to :inquiry
  belongs_to :question
  has_one    :respondent,   :through => :inquiry

  validates_uniqueness_of :inquiry_id
  validates_presence_of   :text
end

Модель респондента (поля: id, email, user_id):

class Respondent < ActiveRecord::Base
  has_many :inquiries, :dependent => :destroy
  has_many :questions, :through => :inquiries
  belongs_to :user

  validates_uniqueness_of :email
  validates_presence_of :email
end

Модель запроса (поля: id, question_id, responsedent_id):

class Inquiry < ActiveRecord::Base
  belongs_to  :question
  belongs_to  :respondent
  has_one    :answer, :dependent => :destroy

Модель вопроса (поля: id, текст):

class Question < ActiveRecord::Base
  has_many :inquiries, :dependent => :destroy
  has_many :answers, :through => :inquiries, :dependent => :destroy
  belongs_to :user
end

1 Ответ

0 голосов
/ 30 мая 2011

В зависимости от контекста, в котором вы хотите получить эти данные, и при условии, что у вас не слишком много респондентов и вопросов, вы можете сделать следующее. Это предполагает, что у вас есть метод с именем отвеченный? в вашей модели вопроса, которая возвращает true, если на вопрос дан ответ.

respondents = [] 
Respondent.all.each do |respondent|

  total_questions = respondent.questions.count
  answered_questions = 0

  unless total_questions < 1   
    respondent.questions.each do |q|
      q.answered? ? answered_questions++ : nil
    end
  end

  if answered_questions == 0
    respondents << respondent
  end
end

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...