【问题标题】:undefined method 'authorize' with PunditPundit 的未定义方法“授权”
【发布时间】:2014-12-01 20:57:22
【问题描述】:

我已在我的 Rails 应用程序中安装 gem Pundit,并仔细按照自述文件中的说明进行操作。

但是,当我在我的任何控制器中使用授权时,我会收到错误消息“未定义的方法 'authorize' for .

另外,当我尝试在视图中使用“策略”时,我收到错误“未定义的方法‘策略’”。

就好像根本没有安装 Pundit!

我已将 Pundit 包含在我的应用程序控制器中。

我有一个包含所有策略的 ApplicationPolicy 文件,然后是从应用程序策略继承的每种记录类型的策略文件。

由于某种原因,我无法将任何代码粘贴到这个问题中,所以我希望我已经包含了足够的信息!

如果有任何想法,我将不胜感激。

【问题讨论】:

  • Pundit 是“纯粹的 Ruby”,因此将它包含在您的应用程序控制器中应该就是您所需要的。你确定你拼写正确吗? include PunditApplicationController 声明下方的第一行。另外,您的控制器是否继承自 ApplicationController
  • 谢谢!这些想法很有帮助。
  • 碰巧,您是否使用 Clearance 进行身份验证?如果是这样,Devise 使用与 Pundit 冲突的名为 authorize 的方法。在我的应用程序控制器中,我有这个alias_method :require_login, :authorize,下一行是我的include Pundit。此外,请确保您在模型实例上调用授权(即authorize @my_var
  • 在 Rails 引擎中使用时,我们必须在命名空间 ApplicationController 中 require 'pundit'

标签: ruby-on-rails pundit


【解决方案1】:

我最近使用了 pundit,它就像一个魅力。 你的错误信息让我推断你没有运行安装 rails g pundit:install 或您的策略文件不在正确的目录中。

或者如果他们正在重新启动服务器应该可以解决这个问题。希望。

【讨论】:

    【解决方案2】:

    您需要使用 pundit:install 生成器为您的应用程序生成一个默认策略文件。

    rails g pundit:install
      create  app/policies/application_policy.rb
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-13
      相关资源
      最近更新 更多