我有这个方法
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
方法只抓取第一个元素,但不删除它,我怎样才能将它删除呢?
答案 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