2012-06-11 42 views
7

我已经成立了一个类加载ActiveModel在我的Rails应用程序是这样的:ActiveModel有一个包含“update_attributes”方法的模块吗?

class MyThingy 
    extend ActiveModel::Naming 
    extend ActiveModel::Translation 
    include ActiveModel::Validations 
    include ActiveModel::Conversion 

    attr_accessor :username, :favorite_color, :stuff 

    def initialize(params) 
    #Set up stuff 
    end 

end 

我真的希望能够做到这一点:

thingy = MyThingy.new(params) 
thingy.update_attributes(:favorite_color => :red, :stuff => 'other stuff') 

我可以只写我自己的update_attributes方法,但我有一种感觉,它存在于某个地方。可以?

回答

7

没有,但有这种情况常见的模式:

class Customer 
    include ActiveModel::MassAssignmentSecurity 

    attr_accessor :name, :credit_rating 

    attr_accessible :name 
    attr_accessible :name, :credit_rating, :as => :admin 

    def assign_attributes(values, options = {}) 
    sanitize_for_mass_assignment(values, options[:as]).each do |k, v| 
     send("#{k}=", v) 
    end 
    end 
end 

这是from here.见链接的例子。

如果您发现自己经常重复此方法,则可以将此方法提取到单独的模块中,并包括按需包含它。

+0

是否有对于新版Rails版本有哪些启发? – schmijos

相关问题