2012-06-11 39 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

相關問題