我有这个方法
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
方法仅获取第一个元素,但不会删除它,我该如何制作它才能同时执行这两个操作?
最佳答案
这不是一个数组: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
关于ruby-on-rails - 如何从 ActiveRecord 数组中获取 "shift"对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22887088/