Rails 检查一个数组是否在另一个数组中
Rails Checking if One Array is in Another
我有五个模型:Course、Lesson、Question、Answer 和 User。
我想做的是确定用户是否对课程中的所有问题都有答案(如果是这样,我可以在视图中的课程旁边放置 "Done") .
我的模特:
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) 我如何完成我的 objective 找到课程并回答所有问题,以及 (b) 是否有更有效的方法来做到这一点。谢谢!
问题
你不能像这样检查一个数组是否包含另一个数组:
user_questions.include?(lesson_questions)
您需要检查 lesson_questions
中的每个元素是否包含在 user_questions
中。
试试这些:
解法:1
lesson_questions.all? { |lq| user_questions.include?(lq) }
如果所有 lesson_questions
都包含在 user_questions
中,这应该 return 为真。
解法:2
(lesson_questions - user_questions).empty?
我有五个模型:Course、Lesson、Question、Answer 和 User。
我想做的是确定用户是否对课程中的所有问题都有答案(如果是这样,我可以在视图中的课程旁边放置 "Done") .
我的模特:
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) 我如何完成我的 objective 找到课程并回答所有问题,以及 (b) 是否有更有效的方法来做到这一点。谢谢!
问题
你不能像这样检查一个数组是否包含另一个数组:
user_questions.include?(lesson_questions)
您需要检查 lesson_questions
中的每个元素是否包含在 user_questions
中。
试试这些:
解法:1
lesson_questions.all? { |lq| user_questions.include?(lq) }
如果所有 lesson_questions
都包含在 user_questions
中,这应该 return 为真。
解法:2
(lesson_questions - user_questions).empty?