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 に答える