我有一个用户注册用户注册用户名,first_class和其他一些attribs。现在,我还需要设置一些其他属性,例如:str或:acc。
这些属性可能会在像mass这样的质量分配命令中设置。当然,我不想分别对每个人执行类似update_attribute的操作。因此,我必须使它们成为attr_accessible。
但是,我不希望用户设置它们。例如,如果用户决定拥有first_class ='Ranger',我会设置他的:str而不是他。
我的想法是,我只保存params [:first_class]或params [:username],并在我的create方法中为用户显式设置其他所有内容。这是你怎么做的?
答案 0 :(得分:6)
我猜测其他属性是根据用户在注册过程中选择的内容预先确定的?
在这种情况下,我会在您的模型中添加一个before_create
挂钩,以便相应地计算和分配这些属性:
class PlayerCharacter < ActiveRecord::Base
before_create :assign_attributes
# ...
# This is called after you call "update_attributes" but before
# the record is persisted in the database
def assign_attributes
# Stats are determined by the 'first_class' attribute
stats = case first_class
when "Ranger" then { :str => 20, :dex => 19, :wis => 8 }
when "Wizard" then { :str => 10, :dex => 14, :wis => 18 }
end
self.attributes.merge!(stats)
end
end
答案 1 :(得分:2)
根据Dan的方法,你也可以为你的角色恕我直言添加一个新的“PlayerClass”模型。它可以与您的玩家或角色类具有belongs_to的关系,因此您可以拥有许多这样的关系。这样,如果您需要更多类,可以通过ui中的管理控件添加它,并将其直接添加到数据库中。
再接受一次:)