0

在尝试为我的练习应用程序设置策略时。我在我的帖子控制器中遇到了“无方法错误”。

如果我们在后控制器上归零,我的更新方法就是代码。

 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代码指向 pundit 中查找访问策略的助手。

在我的 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

4

2 回答 2

1

学过的知识。正确阅读文档。我需要使用

def pundit_user
    current_admin
  end

它有效。

于 2014-04-18T03:19:55.633 回答
0

我不熟悉 gem pundit,但查看代码我可以假设您pundit_user以错误的方式定义。

根据文档,您可以自定义pundit_userUser.find_by_other_means. 我认为这个方法应该返回一个User. 你重新定义pundit_userAdmin. 我认为你应该返回类的实例Admin

于 2014-04-17T06:07:34.867 回答