假设我有一个属于User模型的Document模型。用户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
我很好奇是否有更好的方法来做到这一点。我不正确地接近它吗?这似乎是其他人想要做的事情......所以,我希望能够深入了解其他人如何接近这一点。
答案 0 :(得分:4)
你有正确的想法,你只需要通过权威类明确地调用它:
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
那应该能给你你想要的东西。
答案 1 :(得分:0)
在Document Controller中,声明用户变量并授权该用户。
def edit
@document = Document.find(params[:id])
@user = User.find(@document.user_id) #or how you define it
authorize @user
end
然后专家会查看您的用户政策以进行编辑?方法
**编辑有关错误消息,它表示您的文档模型没有与之关联的策略文件。如果您查看您的策略文件夹,您应该看到user_policy.rb但不是document_policy.rb(app / controllers / policies)