我正在对user
模型进行检查以确定他/她是否有一个或多个task_list
,如果她有多个task_list,则只允许她删除它,否则抛出异常。我在用户模型中基本上有一个名为delete_list的方法,允许短手删除,例如user1.delete_list(list1)
我正在讨论是否将支票放在CanCan中作为控制器上的过滤器应用的位置,或者是否也将其放在用户模型中。建议的做法是什么?
答案 0 :(得分:1)
我认为一个好的DRY方法是在模型中创建一个方法来测试是否允许删除。然后从您的控制器或ability.rb中使用该方法。恕我直言,我认为,如果有可能在将来更改为不同的权限系统,那么将复杂的权限/业务逻辑与CanCan分离会更好。
在你的模特中:
def can_destroy_list(list)
... Do check here ....
end
在ability.rb
can :destroy, List do |list|
user.can_destroy_list(list)
end
如果需要,您的控制器和视图也可以直接在模型实例上使用can_destroy_list
:如果can? :destroy, @list