我收到了
格式的回复 #<Response:0x000... @first = "Charlie", @last=Kelly, ....
我需要把它变成哈希(对于活跃的商家)。目前我正在循环变量并执行此操作:
response.instance_variables.each do |r|
my_hash.merge!(r.to_s.delete("@").intern => response.instance_eval(r.to_s.delete("@")))
end
这样可行,它会产生{:first = "charlie", :last => "kelly"}
,但它似乎有点hacky和不稳定。有更好的方法吗?
编辑:我刚刚意识到我可以将instance_variable_get用于该等式的第二部分,但这仍然存在主要问题。
答案 0 :(得分:9)
Rails在Object
上有一个名为instance_values
的方法。这是code on GitHub。
class C
def initialize(x, y)
@x, @y = x, y
end
end
C.new(0, 1).instance_values # => {"x" => 0, "y" => 1}
C.new(0, 1).instance_values.symbolize_keys # => {:x => 0, :y => 1}