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 

雖然您可能想在嘗試添加權限之前檢查權限是否存在。

相關問題