Aby to zrobić bez Railsów, czystym sposobem jest przechowywanie atrybutów w stałej.
class Gift
ATTRIBUTES = [:name, :price]
attr_accessor(*ATTRIBUTES)
end
Następnie, aby przekonwertować wystąpienie Gift
na a Hash
, możesz:
class Gift
...
def to_h
ATTRIBUTES.each_with_object({}) do |attribute_name, memo|
memo[attribute_name] = send(attribute_name)
end
end
end
Jest to dobry sposób na zrobienie tego, ponieważ będzie obejmował tylko to, co zdefiniujesz attr_accessor
, a nie każdą zmienną instancji.
class Gift
ATTRIBUTES = [:name, :price]
attr_accessor(*ATTRIBUTES)
def create_random_instance_variable
@xyz = 123
end
def to_h
ATTRIBUTES.each_with_object({}) do |attribute_name, memo|
memo[attribute_name] = send(attribute_name)
end
end
end
g = Gift.new
g.name = "Foo"
g.price = 5.25
g.to_h
g.create_random_instance_variable
g.to_h