考虑我有以下模型定义,我想要一个特定的属性,该属性从创建的那一刻起就应该保持不变
class A
property :a1, String, :freeze => true
end
有这样的事情吗?或者可能正在使用回调?
考虑我有以下模型定义,我想要一个特定的属性,该属性从创建的那一刻起就应该保持不变
class A
property :a1, String, :freeze => true
end
有这样的事情吗?或者可能正在使用回调?
尝试以下操作:
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"
。
如果您不需要分配常量,那么
property :a1, String, :writer => :private
before :create do
attribute_set :a1, 'some value available at creation time'
end
可能就足够了