Pundit出现“undefined method 'authorize'”错误

5
我在我的Rails应用程序中安装了Pundit gem,并仔细遵循了README中的说明。
然而,当我在任何一个控制器中使用'authorize'时,都会出现错误信息“undefined method 'authorize' for”。
另外,在视图中尝试使用“policy”时,会出现“undefined method 'policy'”错误。
好像根本没有安装Pundit!
我已经在我的Application Controller中包含了Pundit。
我有一个包含所有策略的ApplicationPolicy文件,然后是每种类型记录的策略文件,这些文件都继承自Application Policy。
由于某些原因,我无法将我的代码粘贴到此问题中,所以希望我提供了足够的信息!
非常感谢您的想法。

5
"Pundit是“纯粹的Ruby”,因此将其包含在您的Application Controller中应该就足够了。您确定拼写都正确吗?在ApplicationController声明下面,第一行是 include Pundit 吗?同时,您的控制器是否继承自ApplicationController?" - nikkon226
谢谢!这些想法很有帮助。 - Ellen W
你是否在使用Clearance进行身份验证?如果是这样,Devise使用了一个名为authorize的方法,与Pundit发生冲突。在我的应用控制器中,我有这个alias_method :require_login, :authorize,下一行是我的include Pundit。此外,请确保在模型实例上调用authorize(即authorize @my_var)。 - craig.kaminsky
当在Rails引擎中使用时,我们必须在命名空间的ApplicationController中require 'pundit' - Gregor
3个回答

3

我最近使用了pundit,它的效果非常好。你的错误信息让我推断你还没有运行安装rails g pundit:install命令,或者你的策略文件不在正确的目录中。

如果它们已经在正确的目录中,重启服务器应该可以解决问题。希望如此。


1

对我来说,我在ApplicationController的顶部缺少include Pundit这一行。添加了这一行之后问题得到解决。


0

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接