141 votes

Ruby convertit l'Objet de Hachage

Disons que j'ai un Gift objet avec @name = "book" & @price = 15.95. Quel est le meilleur moyen de convertir la table de Hachage {name: "book", price: 15.95} en Ruby, pas de Rails (mais n'hésitez pas à donner les Rails de réponse trop)?

311voto

Austin Marusco Points 927

Juste dire (objet courant).attributs

.attributs retourne la valeur de hachage de l'objet. Et c'est beaucoup plus propre aussi.

84voto

Vasiliy Ermolovich Points 14719
class Gift
  def initialize
    @name = "book"
    @price = 15.95
  end
end

gift = Gift.new
hash = {}
gift.instance_variables.each {|var| hash[var.to_s.delete("@")] = gift.instance_variable_get(var) }
p hash # => {"name"=>"book", "price"=>15.95}

49voto

levinalex Points 2580

Mettre en oeuvre #to_hash?

class Gift
  def to_hash
    hash = {}
    instance_variables.each {|var| hash[var.to_s.delete("@")] = instance_variable_get(var) }
    hash
  end
end


h = Gift.new("Book", 19).to_hash

49voto

Erik Reedstrom Points 121
Gift.new.instance_values # => {"name"=>"book", "price"=>15.95}

14voto

mcm Points 187

Pour L'Enregistrement Actif Objets

module  ActiveRecordExtension
  def to_hash
    hash = {}; self.attributes.each { |k,v| hash[k] = v }
    return hash
  end
end

class Gift < ActiveRecord::Base
  include ActiveRecordExtension
  ....
end

class Purchase < ActiveRecord::Base
  include ActiveRecordExtension
  ....
end

et puis il suffit d'appeler

gift.to_hash()
purch.to_hash() 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X