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?