迭代并设置Ruby对象实例变量

我正在寻找一种方法来迭代Ruby对象的实例变量,并使用通用setter单独设置它们(从提供的哈希)。 我假设我可以直接在方法中迭代它们并简单地单独设置它们。

这是我的对象实例,你:

u = # 

我想用给定的哈希填充它,h:

 h = { "id"=>"141", "alpha"=>"Muccahiya"" "bravo"=>"$2a$10$xR2g", "charlie"=>"2018-02-21 10:41:56-05", "delta"=>"2018-02-05 18:17:16.752606-05", "echo"=>"wobbly", "status"=>"active" } 

这是我的方法,它抛出这个错误:

 def to_obj(h) self.instance_variables.each do |i| self.i = h[i.sub('@','')] end end 

错误:

 Traceback (most recent call last): 3: from /users/rich/app.rb:31:in `' 2: from /Library/WebServer/Documents/dingbat/models/waffle.rb:240:in `to_obj' 1: from /Library/WebServer/Documents/dingbat/models/waffle.rb:240:in `each' /Library/WebServer/Documents/dingbat/models/waffle.rb:241:in `block in to_obj': no implicit conversion of String into Integer (TypeError) 

self.instance_variables确实是一个符号数组。

我在想一个对象可以在给定哈希的instance_variables设置它的instance_variables 。 这不难。

 def to_obj(h) h.each{|k, v| instance_variable_set("@{k}", v)} end 

如果只想在定义了这样的实例变量时设置一个值,那么执行:

 def to_obj(h) h.each do |k, v| next unless instance_variable_defined?("@{k}") instance_variable_set("@{k}", v) end end