如果重复,我试图取消 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 并取消保存。但由于是关联回调,我需要引发异常以取消保存,如 here 所述。问题是我不知道如何从该异常中优雅地恢复。
有任何想法吗???
最佳答案
您需要从添加权限角色的任何代码中捕获异常。
begin
role.permissions.add(permission)
rescue
# do whatever should happen here.
end
虽然,您可能需要在尝试添加之前检查该权限是否存在。
关于ruby-on-rails-3 - 如何取消 before_add 关联回调中的保存?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11581716/