Kopiowanie wartości do atrybutów

Mam taki oto kod:

[code=ruby]class SystemAccountValidator < ValidatingBase

attr_accessor :login
attr_accessor :mail
attr_accessor :new_password
attr_accessor :old_password

validates_presence_of :login, :message => “Musisz podać login”
validates_presence_of :mail, :message => “Musisz podać e-mail podany podczas rejestracji”
validates_confirmation_of :new_password, :message => “Potwierdzenie hasła musi być identyczne z nowy”

def initialize(params)
params.each_index { |index| self[:index] = params[index] }
end
end[/code]
Przedstawia on mniej więcej to co chciałbym uzyskać - skopiować tablicę tak, aby powstały pole:

[quote][‘a’ => ‘A’, ‘b’ => ‘B’]

object.a = A
object.b.= B[/quote]
Ale jakoś sprytnie.

Przecież masz napisane w http://wiki.rubyonrails.org/rails/pages/HowToUseValidationsWithoutExtendingActiveRecord, step 1.

[code=ruby]class ValidatingBase
def save; end
def save!; end
def update_attribute; end
def new_record?; end
def self.human_attribute_name(arg)
arg.to_s
end
include ActiveRecord::Validations
def
instance_variable_get(key)
end
def initialize(attributes = nil)
return nil if attributes.nil?

attributes.each do |key, value|    
  method("#{key}=").call(value)
end

end
end[/code]
Przyglądnij się metodzie initialize. Aczkolwiek trzeba uważać, bo w ten sposób można wywołać wszystkie metody o nazwie #{key}= (czyli w zasadzie każdy setter).