如何在帖子控制器中解决“无方法错误”。 Devise,Pundit,博客应用

时间:2014-04-17 05:48:50

标签: ruby-on-rails ruby devise pundit

尝试为我的练习应用设置政策。我在帖子控制器中遇到了“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

2 个答案:

答案 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

的实例