2013-03-14 31 views
0

我有一個看起來隨機的答案,並將它們放入一個數組的方法:如何比較數組中的記錄與Ruby或Rails中的另一條記錄?

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) 

回答

1

如果兩個ActiveRecord模型不是new_record並且它們具有相同的ID,則它們是相等的。 http://apidock.com/rails/ActiveRecord/Base/%3D%3D

這裏,等價不能設置,因爲你的兩個對象是新記錄。

你有2個解決方案:

  • Answer模型
  • 定義==(val)功能做這樣的事情:

    if !answer.nil? && answers.detect{|a| a.user_id == user.id}.nil? 
        ... 
    end 
    
1

這並沒有真正回答這個問題,但如果你想從一個數組隨機N個元素,你可以使用sample

user.answers.sample(n) 

假設你的用戶has_many :answers。我沒有看到任何與您的代碼有明顯錯誤的地方,include?應該按照我的預期在這裏工作我相信。

+0

感謝您指出樣本 - 沒知道它存在! – 2013-03-14 17:00:15

相關問題