4

繰り返される場合、 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 を返すだけで、保存がキャンセルされます。しかし、関連付けられているコールバックであるため、ここで説明されているように、保存をキャンセルするには例外を発生させる必要があります。問題は、その例外から正常に回復する方法がわからないことです。

何か案は???

4

1 に答える 1

0

アクセス許可ロールを追加しているコードから例外をキャッチする必要があります。

begin
  role.permissions.add(permission)
rescue
  # do whatever should happen here.
end

ただし、権限を追加する前に、その権限が存在することを確認することをお勧めします。

于 2015-04-22T05:49:13.267 に答える