#ruby-on-rails
#ruby-on-rails
Вопрос:
Я хочу получить id
s респондентов, которые не ответили ни на один вопрос. Как мне этого добиться?
Ниже приведены мои модели и их взаимосвязи друг с другом.
Модель ответа (поля: id, inquiry_id, текст):
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, responsent_id):
class Inquiry < ActiveRecord::Base
belongs_to :question
belongs_to :respondent
has_one :answer, :dependent => :destroy
Модель вопроса (поля: идентификатор, текст):
class Question < ActiveRecord::Base
has_many :inquiries, :dependent => :destroy
has_many :answers, :through => :inquiries, :dependent => :destroy
belongs_to :user
end
Ответ №1:
В зависимости от контекста, в котором вы хотите получить эти данные, и предполагая, что у вас не слишком много респондентов и вопросов, вы могли бы сделать следующее. Это предполагает, что у вас есть метод с именем answered? в вашей модели вопроса, которая возвращает 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
В конце у вас остается массив объектов-респондентов, что означает, что вы можете выполнить итерацию по нему, чтобы получить идентификаторы.
Комментарии:
1. Спасибо, но извините, я новичок в rails, rails выдает ошибку в строке ‘q.ответили? ? ответы на вопросы : ноль’ … в чем проблема? И я что должен написать в представлении?
2. код, который я написал, является примером кода, поэтому предполагается, что есть ответ? метод в вашей модели вопроса, который проверяет, был ли получен ответ на вопрос, и если он есть, возвращает true, в противном случае он возвращает false.