書き込み可能なすべてのActiveRecordアソシエーションメソッドの動作をオーバーライドする方法はありますか?たとえば、次のような「リクエスト」というモデルがあります。
class Request < ActiveRecord::Base
has_many :line_items
end
リクエストモデルには、「ステータス」と呼ばれるフィールドがあります。ステータスが「DRAFT」でない場合、line_itemsリレーションの書き込み可能なすべてのActiveRecordアソシエーションメソッドで例外をスローする必要があります。次のように、個別にオーバーライドできることを知っています。
class Request < ActiveRecord::Base
has_many :line_items
def line_items=(args)
if status != 'DRAFT'
raise Exception.new "cannot edit a non-draft request"
else
write_attribute :line_items, args
end
end
end
ただし、ActiveRecordがこれらの関連付けのために作成するメソッドはたくさんあります(http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.htmlの「自動生成されたメソッド」を参照)。
助けてくれてありがとう。