Лучший способ преобразовать несколько переменных экземпляра в хеш с помощью ruby? - PullRequest
5 голосов
/ 03 октября 2011

Я получаю ответ в формате

 #<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"} , но кажется немного хакерским и нестабильным. Есть ли лучший способ сделать это?

edit: я только что понял, что могу использовать instance_variable_get для второй части этого уравнения, но это все еще оставляет основную проблему.

1 Ответ

9 голосов
/ 03 октября 2011

В 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}
...