2012-06-11 13 views
7

mam założyć klasę ActiveModel w moim app Rails tak:Czy ActiveModel ma moduł zawierający metodę "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 

naprawdę chcę być w stanie to zrobić:

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

mogę tylko napisać update_attributes na własną rękę, ale mam wrażenie, że gdzieś istnieje. Czy to?

Odpowiedz

7

Nie, ale jest wspólny wzorzec dla tej sprawy:

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 

To from here. Patrz odnośnik do przykładów.

Jeśli znajdziesz się powtarzać takie podejście często można wyodrębnić tę metodę w osobnym module i obejmują m.in., że na żądanie.

+0

Are jakiekolwiek oświecenia dla nowszych wersji szyn? – schmijos

Powiązane problemy