我有一个用户模型,其中包含一些用户信息,如灵巧,力量等。用户有许多库存物品,还具有额外的力量,灵活性等。
将这些值组合在一起的User对象的更好方法是什么?我的意思是,像current_user.dexterity = current_user.dexterity + current_user.inventory_item.dexterity
这样的东西,但在一个易于访问的对象中以更好的方式组合所有属性。
另外,我认为find在这里很重要,因为我还想:包含更多信息:game_item(数据库中与inventory_item对应的项目的静态表示)。
答案 0 :(得分:0)
你可能会做这样的事情:
class User < ActiveRecord::Base has_many :inventory_items def dexterity read_attribute(:dexterity)+inventory_items.includes(:game_items).inject(0){ |s,i| s += i.dexterity) end end
此代码将读取用户的灵活性,然后包含所有库存物品并将其与相应的游戏物品一起加入,然后计算物品灵活性的总和并将其添加到总数中。计算总和的另一种方法是:
current_user.inventory_items.all.sum(&:dexterity)