2012-06-11 6 views
7

He creado una clase ActiveModel en mi aplicación Rails como esto:¿ActiveModel tiene un módulo que incluye un método "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 

Realmente quiero ser capaz de hacer esto:

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

tan sólo pudiera escribir update_attributes por mi cuenta, pero tengo la sensación de que existe en alguna parte. ¿Lo hace?

Respuesta

7

No, pero hay un patrón común para este caso:

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 

Es from here. Ver el enlace para ver ejemplos.

Si repite este enfoque a menudo, puede extraer este método en un módulo aparte e incluirlo bajo demanda.

+0

¿Hay cualquier aclaración para las versiones de rieles más nuevos todavía? – schmijos

Cuestiones relacionadas