我希望能够在作为哈希的非数据库模型上拥有虚拟属性。我只是无法弄清楚在这个哈希中添加和删除项目的语法是什么:
如果我定义:
attr_accessor :foo, :bar
然后在模型中的方法中,我可以使用:
self.foo = "x"
但我不能说:
self.bar["item"] = "value"
答案 0 :(得分:2)
尝试
self.bar = Hash.new
self.bar["item"] = "value"
答案 1 :(得分:1)
class YourModel
def bar
@bar ||= Hash.new
end
def foo
bar["item"] = "value"
end
end
但经典方法是:
class YourModel
def initialize
@bar = Hash.new
end
def foo
@bar["item"] = "value"
end
end
答案 2 :(得分:0)
答案 3 :(得分:0)
当你打电话时:
attr_accessor :foo, :bar
在你的课上,Ruby做了类似下面的事情:
def foo
return @foo
end
def foo=(val)
@foo = val
end
def bar
return @bar
end
def bar=(val)
@bar = val
end
方法#foo和#bar只是返回实例变量而#foo =和#bar =只是设置它们。因此,如果您希望其中一个包含Hash,则必须在某处分配此Hash。
我最喜欢的解决方案如下:
class YourModel
# generate the default accessor methods
attr_accessor :foo, :bar
# overwrite #bar so that it always returns a hash
def bar
@bar ||= {}
end
end