Để làm điều này mà không có Rails, một cách rõ ràng là lưu trữ các thuộc tính trên một hằng số.
class Gift
ATTRIBUTES = [:name, :price]
attr_accessor(*ATTRIBUTES)
end
Và sau đó, để chuyển đổi một thể hiện của Gift
a Hash
, bạn có thể:
class Gift
...
def to_h
ATTRIBUTES.each_with_object({}) do |attribute_name, memo|
memo[attribute_name] = send(attribute_name)
end
end
end
Đây là một cách tốt để làm điều này bởi vì nó sẽ chỉ bao gồm những gì bạn xác định attr_accessor
và không phải mọi biến thể hiện.
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
#=> {:name=>"Foo", :price=>5.25}
g.create_random_instance_variable
g.to_h
#=> {:name=>"Foo", :price=>5.25}