0

我有一种方法可以查找随机答案并将它们放入数组中:

def self.answer_list(user)
  answers = Array.new
  for i in 1..25
    answer = random(user)
    if !answer.nil? && !answers.include?(answer)
      answers << answer 
    end
  end
  return answers
end

包括?如果记录已经存在,则方法应该不让记录进入数组,但无论如何都会将其放入

如何比较新记录以确保数组中没有类似的东西?从 random 方法返回的记录是这样的

 return answer = Answer.new(user_id: user.id, contact_id: contact.id, statement_id: statement.id)
4

2 回答 2

1

这并不能真正回答问题,但如果你想从一个数组中随机 N 个元素,你可以使用sample

user.answers.sample(n)

假设您的用户has_many :answers. 我没有看到您的代码有任何明显错误的地方,我相信include? 应该在这里按预期工作。

于 2013-03-14T16:56:48.023 回答
1

如果两个 ActiveRecord 模型不相等new_record并且它们具有相同的 ID,则它们是相等的。 http://apidock.com/rails/ActiveRecord/Base/%3D%3D

在这里,无法设置等价,因为您的两个对象是新记录。

您有 2 个解决方案:

  • 在模型中定义一个==(val)函数Answer
  • 做这样的事情:

    if !answer.nil? && answers.detect{|a| a.user_id == user.id}.nil?
       ...
    end
    
于 2013-03-14T16:58:11.400 回答