繰り返される場合、 has_many 要素の保存を (適切に) キャンセルしようとしています。これが私が意味することです:
class AdmininstratorRole < ActiveRecord::Base
has_many :permissions, before_add: :avoid_repetition
def avoid_repetition(permission)
raise "Repeated Permission" if self.permissions.where(klass: permission.klass, action: permission.action).count > 0
end
end
関連付けられたコールバックでない場合は、false を返すだけで、保存がキャンセルされます。しかし、関連付けられているコールバックであるため、ここで説明されているように、保存をキャンセルするには例外を発生させる必要があります。問題は、その例外から正常に回復する方法がわからないことです。
何か案は???