0

考虑我有以下模型定义,我想要一个特定的属性,该属性从创建的那一刻起就应该保持不变

class A
  property :a1, String, :freeze => true
end

有这样的事情吗?或者可能正在使用回调?

4

2 回答 2

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"

于 2012-12-14T20:02:13.787 回答
0

如果您不需要分配常量,那么

property :a1, String, :writer => :private

before :create do
  attribute_set :a1, 'some value available at creation time'
end

可能就足够了

于 2012-12-12T07:27:34.863 回答