如何改进此Rails代码?

Kir*_*ein 4 ruby refactoring ruby-on-rails

我正在编写一个小浏览器游戏作为学习RoR的项目,我对它很陌生.

这是一个由cronjob定期调用的方法.

我猜应该有一些方法可以在魔药数组中添加元素,然后在最后进行批量保存,我也不喜欢每次在循环中点击数据库以再次获得市场的项目数量.

def self.restock_energy_potions
  market = find_or_create_market

  potions = EnergyPotion.find_all_by_user_id(market.id)

  while (potions.size < 5)
    potion = EnergyPotion.new(:user_id => market.id)
    potion.save
    potions = EnergyPotion.find_all_by_user_id(market.id)
  end    
end
Run Code Online (Sandbox Code Playgroud)

Mar*_*usQ 8

我不确定我是否理解你的问题.你在找这样的东西吗?

def self.restock_energy_potions
  market = find_or_create_market   
  potions = EnergyPotion.find_all_by_user_id(market.id)
  (potions.size...5).each {EnergyPotion.new(:user_id => market.id).save }
  end    
end
Run Code Online (Sandbox Code Playgroud)

注意范围内的三点; 如果已经有5个,你不想创造药水.

此外,如果您的魔药被链接(例如has_many),您可以通过market.potions属性创建它们(我在这里猜测,关于用户和市场之间的关系 - 细节取决于您的模型的设置方式)并立即保存它们.我不认为数据库的节省会很重要.