2012-06-11 24 views
7

Bu gibi benim Raylar uygulamasında bir ActiveModel sınıfını kurdum:ActiveModel'in bir "update_attributes" yöntemi içeren bir modülü var mı?

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 
Gerçekten bunu yapmak mümkün istiyorum

: Ben sadece kendi başıma update_attributes yazabilirsiniz

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

, ama bir yerde var olduğunu hissediyorum. Yapar?

cevap

7

Hayır, ancak bu durumda ortak desen var: Bu from here. var

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 

örnekler için bağlantıya göz atın.

Bu yaklaşımı sık sık tekrarladığınızı düşünüyorsanız, bu yöntemi ayrı bir modülde ayıklayabilir ve isteğe bağlı olarak dahil edebilirsiniz.

+0

var mıdır Henüz yeni ray versiyonları için herhangi bir aydınlanma var mı? – schmijos