如何转变" ActiveRecord数组中的对象

时间:2014-04-05 21:31:37

标签: ruby-on-rails ruby

我有这个方法

def gen_events(score)
  events = location.events
  (1..rand(5..7)).each do |n|
    random = rand(0.139..1).round(3)
    rarity = Character.get_rarity(random)
    event = events.where(rarity: rarity).shuffle.shift #<-- HERE
    self.events << event    
  end
end

目前,shift方法只抓取第一个元素,但不删除它,我怎样才能将它删除呢?

1 个答案:

答案 0 :(得分:2)

这不是一个数组:events.where(rarity: rarity),这是一个ActiveRecord范围,你不能从中删除东西,而不会从数据库中删除和删除它们。相反,您应该保留已找到的对象数组,并使用它来过滤未来的结果:

def gen_events(score)
    events = location.events
    new_events = []
    (1..rand(5..7)).each do |n|
        random = rand(0.139..1).round(3)
        rarity = Character.get_rarity(random)
        event = events.where(rarity: rarity).where.not(id: new_events.map(&:id).sample
        new_events << event
    end
    self.events << new_events    
end