考虑我有以下模型定义,我想要一个特定的属性,从创建时起它应该是不变的
class A
property :a1, String, :freeze => true
end
有类似的东西吗?或者可能正在使用回调?
答案 0 :(得分:2)
尝试以下方法:
class YourModel
property :a1, String
def a1=(other)
if a1
raise "A1 is allready bound to a value"
end
attribute_set(:a1, other.dup.freeze)
end
end
初始化程序在内部委托给普通的属性编写器,因此当您通过YourModel.new(:a1 => "Your value")
初始化属性时,无法使用your_instance.a1 = "your value".
更改它。但是当你创建一个新的实例时。 instance = YourModel.new
您可以分配一次instance.a1 = "Your Value"
。
答案 1 :(得分:0)
如果您不需要分配常量,那么
property :a1, String, :writer => :private
before :create do
attribute_set :a1, 'some value available at creation time'
end
可能就够了