尝试为我的练习应用设置政策。我在帖子控制器中遇到了“No Method Error”。
如果我们在post控制器上进行归零,那么我的更新方法就是代码。
def update
authorize @post
respond_to do |format|
if @post.update(post_params)
format.html { redirect_to @post, notice: 'Post was successfully updated.' }
format.json { head :no_content }
#redirect_to @post
else
render :edit
format.html { render action: 'edit' }
format.json { render json: @post.errors, status: :unprocessable_entity }
end
end
端
你可以看到没什么特别的。只是更新页面的HTML和JSON呈现。
authorize
代码指向权威中的助手,用于查找访问策略。
在我的Admin.rb模型中定义。
def editor?
self.role == 'editor'
end
authorize
代码查找与方法名称对应的策略。它在策略类中查找并开始应用此处的业务规则。这就是问题的起点。
我到def update?
@admin.editor?
end
它说undefined method 'editor?' for #<Class:0x007ffb7fa4f6a0>
代码位于Git的策略分支上:https://github.com/wmuengineer/portfolio/tree/policy
答案 0 :(得分:1)
经验教训。正确阅读文档。我需要使用
def pundit_user
current_admin
end
它有效。
答案 1 :(得分:0)
我不熟悉gem pundit
但是看一下代码我可以假设您以错误的方式定义pundit_user
。
根据documentation,您可以将pundit_user
自定义为User.find_by_other_means
。我认为这个方法应该返回User
的实例。您将pundit_user
重新定义为Admin
。我认为你应该返回班级Admin