ruby-on-rails - 如何从 ActiveRecord 数组中获取 "shift"对象

标签 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 方法仅获取第一个元素,但不会删除它,我该如何制作它才能同时执行这两个操作?

最佳答案

这不是一个数组: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/

相关文章:

ruby-on-rails - 如何设置动态resque队列

mysql - 为 Ruby on Rails Database.yml 文件正确配置 MySQL

ruby-on-rails - rails 新手。索引操作不喜欢我的初始化方法。为什么?

RubyForge 死了——现在怎么办?

ruby - rbenv 构建在 Ubuntu 14.04 上失败

ruby-on-rails - ruby on Rails 的设计是否考虑到了整页刷新

javascript - 检查 Javascript 是否可用并重定向到另一个页面

ruby-on-rails - 如果用户登录? CASE current_user.plan_id 否则...?

ruby - 将值转换为 ASCII 字符串的 Ruby 方法是什么?

ruby - 在 rbenv 中从以前版本的 Ruby 复制 gem