我有五种模式:课程,课程,问题,答案和用户。
我要做的是确定用户是否对课程中的所有问题都有答案(因此,如果是这种情况,我可以在视图的课程旁边放置“完成”)。
我的模特:
class Course < ActiveRecord::Base
has_many :lessons, dependent: :destroy
has_many :questions, :through => :lessons
has_many :users, through: :purchases
end
class Lesson < ActiveRecord::Base
belongs_to :course
has_many :questions, dependent: :destroy
has_many :answers, through: :questions
end
class Question < ActiveRecord::Base
belongs_to :lesson
belongs_to :course
has_many :answers, dependent: :destroy
end
class Answer < ActiveRecord::Base
belongs_to :question
belongs_to :user
end
class User < ActiveRecord::Base
has_many :answers
has_one :author
has_many :courses, through: :purchases
end
我尝试做的是检查用户回答的问题中是否有课程问题,但includes?
行似乎没有按照我想要的方式工作。
在我的控制器中,我有:
@lessons = @course.lessons
@answers = current_user.answers
@questions = Question.where(:id => @answers.map(&:question_id))
在我看来,我有:
<% @lessons.each do |lesson| %>
<% lesson_questions = lesson.questions %>
<%= user_questions = @questions.where("lesson_id = ?", lesson.id)%>
<% if user_questions.include?(lesson_questions)%>
Done!
<% end %>
<% end %>
我不确定这是不是原因,但我注意到lesson_questions是#<Question::ActiveRecord_Associations_CollectionProxy:0x9c49698>
虽然user_questions为:#<Question::ActiveRecord_Relation:0x9c48330>
我想知道,(a)我如何实现我的目标,即回答所有问题的课程,以及(b)是否有更有效的方法来做到这一点。谢谢!
答案 0 :(得分:2)
您无法检查数组是否包含另一个数组:
user_questions.include?(lesson_questions)
您需要检查lesson_questions
中是否包含user_questions
中的每个元素。
请尝试这些:
lesson_questions.all? { |lq| user_questions.include?(lq) }
如果lesson_questions
中包含所有user_questions
,则应返回true。
(lesson_questions - user_questions).empty?