Railsモデル属性を保護する方法は?
-
02-07-2019 - |
質問
私の請求書モデルには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
所属していません StackOverflow