说我有一个属于用户模型的文档模型。用户has_many文档。 DocumentPolicy可能包括...

def edit?
  document.user_id == user.id
end

但是,如果...要编辑文档怎么办,您还必须能够编辑该文档的父级(用户)。然后,该策略可能如下所示。
def edit?
  document.user_id == user.id &&
  policy(user).edit?
end

这导致错误:
undefined method `policy' for #<DocumentPolicy

我很好奇是否有更好的方法可以做到这一点。我处理不正确吗?似乎其他人会想做的事情...所以,我希望能深入了解其他人是如何做到这一点的。

最佳答案

您有正确的想法,只需要通过pundit类明确地调用它:

def edit?
  # I am assuming that a user can edit themselves, so the "or" is in there, if not, go back to using and
  document.user_id == user.id or UserPolicy.new(user, User.find(document.user_id)).edit?
end

那应该给你你想要的。

关于ruby-on-rails-4 - 嵌套的Pundit政策?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26514769/

10-13 01:15