无法为NilClass找到范围NilClassPolicy :: Scope

时间:2016-03-18 10:02:57

标签: pundit

我正在构建目前有简单授权要求的应用程序:

所有用户都可以查看所有控制器的数据。 只有管​​理员才能创建/编辑数据。 该项目使用admin gem,因此我的应用程序中没有控制器(尽管我可以在需要时覆盖) 我想为所有控制器的通用要求添加授权:

class ApplicationController < Administrate::ApplicationController
  before_filter :authenticate_admin
  def authenticate_admin
    authorize requested_resource # requested_form is the relevant object(e.g. Post @post)
  end
end

然后我得到以下内容:

无法为NilClass找到范围NilClassPolicy :: Scope app / policies / application_policy.rb:41:范围&#39;应用程序/政策/ application_policy.rb:15:inshow&#39; app / controllers / admin / application_controller.rb:27:在`authenticate_admin&#39;

似乎无法找到政策,你怎么看?

1 个答案:

答案 0 :(得分:0)

我不确定你是否仍然需要这个特定问题的帮助,但是因为我在研究一个非常类似的问题时发现它我想我仍然会把我的两分钱,因为我能够找出原因我收到了类似的例外情况。

我错误地在我的控制器中称为授权,即:

# customer_contoller.rb  
def show 
  authorize @customer
end

但是,我没有在customer_policy.rb中创建相应的def show?方法。我所要做的只是制作相应的节目吗?方法,它的工作!

因此,我认为当控制器中的调用授权与您设置的策略之间存在不匹配时,会导致此异常。特别是当您尚未为要授权的操作创建策略时。

希望能帮助某人至少朝着正确的方向前进。