Использование instance_variable_set
- еще один вариант.Вот пример:
class Test; attr_accessor :name, :age; end
hash = {name: 'John', age: 52}
obj = Test.new
hash.each do |k,v|
obj.instance_variable_set("@#{k}".to_sym, v) # :name is converted to :@name
end
p obj # => #<Test:0x007fd8cbb75b00 @name="John", @age=52>
Единственная хитрость в том, что instance_variable_set ожидает символ, начинающийся с @
, поэтому :@name
допустимо, но :name
- нет.