Ruby - Как установить значение для динамического атрибута в классе

У меня есть такой класс

class A
    #this array of attributes is dynamic, just give example for understanding easier
    attributes = ['abc','S1','S2','S3']
    attributes.each do |e|
        attr_accessor e.to_sym
    end
end

Я хочу вызвать сеттер для каждого атрибута. Итак, я попробовал это (вы понимаете, чего я хочу)

a = A.new
attributes = ['abc','S1','S2','S3']
attributes.each do |attr|
    #I know the following command is wrong (because 'attr' is not a attribute of class A)
    a.attr = 1
end

Итак, как вызвать установщик для динамического атрибута?

P / s: с использованием Ruby 1.8.7 и Rails 2.3.5 Спасибо.


person user4557573    schedule 16.03.2015    source источник


Ответы (2)


Вам следует позвонить

a.send "#{attr}=", 1
a.save!
person Arup Rakshit    schedule 16.03.2015
comment
Вы спасаете мне жизнь. Большое спасибо. - person user4557573; 16.03.2015
comment
И убедитесь, что attr не введен пользователем или находится в белом списке, иначе вы можете запустить непредусмотренные методы. - person DGM; 16.03.2015

Вы можете попробовать это

def set_attributes(*attributes)
    attributes.each {|attribute| self.send("#{attribute}=", 1)}
end
person Sonalkumar sute    schedule 16.03.2015