12

私の Invoice モデルには address_id 属性があり、この address_id を永久に変更したくありません。したがって、これがクラスの外で発生することは望ましくありません。

invoice.address_id = 1
invoice.address = some_address

Rails はこの address_id 属性を請求テーブルからモデルに自動的に追加しますが、この属性を非公開/保護と宣言するにはどうすればよいでしょうか? 通話中

attr_protected :address_id

ドキュメントに基づくと、大量の割り当てを防ぐだけなので、おそらく解決策ではありません。

ありがとう!

4

2 に答える 2

21

あなたがしたいattr_readonly

于 2008-09-26T03:11:43.680 に答える
4

ワンライナーほどきれいではありませんが、以下のコードは機能するはずです (また、メタプログラミングを行って「不変」メソッドを作成することもできます)。

def address_id=(id)
  if new_record?
    write_attribute(:address_id, id)
  else
    raise 'address is immutable!'
  end
end 
于 2008-09-26T03:08:11.677 に答える