【发布时间】:2014-04-17 22:30:23
【问题描述】:
我有以下用于用户、公司、调查、问题和答案的模型。
- 公司有
has_many调查关系 - 公司有
has_many用户关系 - 该调查与
has_manyquestions 相关 - 问题与
has_many答案的关系 - 用户有
has_many答案的关系
据此,该公司有一些用户和一些调查。这些调查有一些问题,每个问题都有一些答案,答案来自某些用户。
我想要做的是检查上次调查并获取未回答调查任何问题的特定用户。
我尝试使用每个循环来实现这一点,遍历公司用户,然后遍历上一次调查中的每个用户问题,然后循环其答案以获取至少回答一个问题的用户并将它们插入到数组中,在这些循环之后,我得到了两个数组之间的差异,只得到没有回答任何问题的用户。这种方法效果很好,但我认为有更好的方法可以做到这一点,也许使用范围或者如果有嵌套范围。除了这种循环方式之外,我只想要一种干净直接的方式。顺便说一句,这个问题需要一个更好的标题:)
current_company = Company.find(current_user.company_id)
has_answer = false
company_users = []
users_whom_answered = []
current_company.users.each {|u| company_users << u}
current_company.users.each do |user|
Survey.last.questions.each do |question|
question.answers.each do |answer|
if answer.user_id == user.id
has_answer = true
users_whom_answered << user
break
end
end
break if has_answer
end
end
result = company_users - users_whom_answered
【问题讨论】:
标签: ruby-on-rails ruby activerecord ruby-on-rails-4