【问题标题】:how to compare a record inside an array with another record in Ruby or Rails?如何将数组中的一条记录与 Ruby 或 Rails 中的另一条记录进行比较?
【发布时间】:2013-03-14 16:51:29
【问题描述】:

我有一个寻找随机答案并将它们放入数组的方法:

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)

【问题讨论】:

    标签: ruby-on-rails arrays include comparison record


    【解决方案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
      

    【讨论】:

      【解决方案2】:

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

      user.answers.sample(n)
      

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

      【讨论】:

        猜你喜欢
        • 2018-08-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-03
        • 1970-01-01
        • 2011-10-12
        • 2023-01-17
        • 2020-06-15
        相关资源
        最近更新 更多