質問

私の請求書モデルにはaddress_id属性があり、このaddress_idを永遠に変更したくありません。だから私はこれをクラスの外で発生させたくない:

invoice.address_id = 1
invoice.address = some_address

Railsは、このaddress_id属性を請求書テーブルからモデルに自動的に追加します。この属性をprivate / protectedとして宣言するにはどうすればよいですか?呼び出し

attr_protected :address_id

ドキュメントに基づいて一括割り当てを防止するだけなので、ほとんどの場合、ソリューションではありません。

ありがとう!

役に立ちましたか?

解決

attr_readonly が必要です。

他のヒント

1つのライナーほどきれいではありませんが、以下のコードは動作するはずです(また、「不変」メソッドを記述するメタプログラミングをいつでも実行できます)

def address_id=(id)
  if new_record?
    write_attribute(:address_id, id)
  else
    raise 'address is immutable!'
  end
end 
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top