Rails检查一个阵列是否在另一个阵列中

时间:2015-12-03 05:42:56

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4 ruby-on-rails-3.2

我有五种模式:课程,课程,问题,答案和用户。

我要做的是确定用户是否对课程中的所有问题都有答案(因此,如果是这种情况,我可以在视图的课程旁边放置“完成”)。

我的模特:

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)是否有更有效的方法来做到这一点。谢谢!

1 个答案:

答案 0 :(得分:2)

问题

您无法检查数组是否包含另一个数组:

user_questions.include?(lesson_questions)

您需要检查lesson_questions中是否包含user_questions中的每个元素。

请尝试这些:

解决方案:1

lesson_questions.all? { |lq| user_questions.include?(lq) }

如果lesson_questions中包含所有user_questions,则应返回true。

解决方案:2

(lesson_questions - user_questions).empty?