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 

如果它不会是一个相关的回调我可以返回false,并且将取消保存。但既然是一个相关的回调,我需要举例说明取消保存,如解释here。问题是我不知道如何从那个异常中优雅地恢复。

任何想法???

回答

0

您需要从任何代码添加权限角色来捕捉异常。

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

虽然您可能想在尝试添加权限之前检查权限是否存在。

相关问题