4

Я пытаюсь отменить сохранение (изящно) элемента has_many, если оно повторяется. Это то, что я имею в виду:Как отменить сохранение в обратных вызовах before_add?

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 

Если он не был бы связан обратный вызов, я мог бы просто вернуться ложным и отменить бы сохранить. Но поскольку это связанный обратный вызов, мне нужно создать исключение, чтобы отменить сохранение, как описано here. Проблема в том, что я не знаю, как изящно излечиться от этого исключения.

Любые идеи ???

ответ

0

Вам нужно поймать исключение из любого кода, добавляющего роль разрешения.

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

Хотя, возможно, вы захотите проверить, существует ли разрешение, прежде чем пытаться его добавить.

Смежные вопросы