使用ruby将几个实例变量转换为哈希的更好方法?

cbr*_*ron 5 ruby hash symbols ruby-on-rails instance-variables

我收到了格式的答复

 #<Response:0x000...   @first = "Charlie", @last=Kelly, ....
Run Code Online (Sandbox Code Playgroud)

我需要把它变成一个哈希(对于活跃的商人).目前我正在循环变量并执行此操作:

response.instance_variables.each do |r|
  my_hash.merge!(r.to_s.delete("@").intern => response.instance_eval(r.to_s.delete("@"))) 
end
Run Code Online (Sandbox Code Playgroud)

这会产生,它会产生{:first = "charlie", :last => "kelly"} ,但它似乎有点hacky和不稳定.有一个更好的方法吗 ?

编辑:我刚刚意识到我可以将instance_variable_get用于该等式的第二部分,但仍然存在主要问题.

Lee*_*vis 9

Rails有一个方法就是为此而Object调用instance_values.这是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}
Run Code Online (Sandbox Code Playgroud)