使用像轨道中的对象一样的哈希

时间:2013-04-26 06:58:40

标签: ruby-on-rails ruby object helper

我想我曾经在rails项目中看到过一个不错的解决方案。我认为这个解决方案是在rails中构建的。

我想得到的是一个类似哈希的对象,它做了类似的事情:

jar = Jar.new #no defined methods 'name' in it!

jar.name #returns nil
jar.name = 'fu'
jar.name #return 'fu'

其中name可能就像散列一样可能。我不想预定义它!

是否有一个帮助类可以在rails或类似的东西中执行此操作?

2 个答案:

答案 0 :(得分:4)

您可以使用Ruby核心中的OpenStruct:

require 'ostruct'

person = OpenStruct.new
person.name    = "John Smith"
person.age     = 70
person.pension = 300

puts person.name     # -> "John Smith"
puts person.age      # -> 70
puts person.address  # -> nil

另外,请查看documentation

答案 1 :(得分:1)

您可以使用openstruct:

require 'ostruct'
=> true 
o = OpenStruct.new
=> #<OpenStruct>
o.foo
=> nil 
o.foo= 1
=> 1 
o.foo
=> 1