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

インクルード?メソッドは、レコードが既に存在する場合は配列に入れないようにすることになっていますが、とにかくそれを入れます

新しいレコードを比較して、同様のものがまだ配列内にないことを確認するにはどうすればよいですか? ランダムメソッドから返されるレコードは次のようなものです

 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

2 つの ActiveRecord モデルは、等しくなくnew_record、同じ ID を持っている場合、同等です。 http://apidock.com/rails/ActiveRecord/Base/%3D%3D

ここでは、2 つのオブジェクトが新しいレコードであるため、同等性を設定できません。

あなたには2つの解決策があります:

  • モデルで==(val)関数を定義するAnswer
  • そのようなことをしてください:

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