Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 使用CanCanCan Rails时HomeController#操作中的名称错误_Ruby On Rails_Cancancan - Fatal编程技术网

Ruby on rails 使用CanCanCan Rails时HomeController#操作中的名称错误

Ruby on rails 使用CanCanCan Rails时HomeController#操作中的名称错误,ruby-on-rails,cancancan,Ruby On Rails,Cancancan,我不熟悉rails。我正在使用CanCanCan(v1.10)和rails(v4.2)。 当我将“authorize_resource”放入ApplicationController时,我无法访问我的主页 应用程序控制器中的示例代码: class ApplicationController < ActionController::Base include CanCan::ControllerAdditions authorize_resource protect_from_fo

我不熟悉rails。我正在使用CanCanCan(v1.10)和rails(v4.2)。 当我将“authorize_resource”放入ApplicationController时,我无法访问我的主页

应用程序控制器中的示例代码:

class ApplicationController < ActionController::Base
  include CanCan::ControllerAdditions
  authorize_resource
  protect_from_forgery with: :exception
  before_action :set_locale

  rescue_from CanCan::AccessDenied do |exception|
    flash[:danger] = t :cancancan_access_denied_text
    redirect_to root_url
  end
end

您不应该使用
authorize\u resource
,因为它试图从控制器名称猜测模型名称,但您的应用程序中没有
StaticPage
模型。相反,您应该调用
authorize在每个操作的开头,如下所示:

def home
  authorize!
  ...
end

因此,您需要从
ApplicationController
中删除
authorize\u资源
,并仅在具有关联模型的控制器中使用它。没有型号的控制器应具有
授权改为操作。

请在问题和完整错误消息中添加
StaticPagesController
代码(应指定字符串编号).app/controllers/static_pages_controller.rb:class StaticPagesControllerresource_class}:resource_class end def resource_instance=(实例)最好编辑问题本身并向其添加信息,因为注释仅用于短消息,而不用于代码段。小心向您寻求帮助的人,并尝试以最可读的方式设置问题的格式。我的PM的要求是使用ApplicationController中的授权资源。所以我需要找到一个解决办法。我试图在StaticPagesController中使用“authorize_resource class:false”,但在我的情况下,它不起作用。实际上,这是一种糟糕的做法<代码>授权\u资源
不应在
应用程序控制器
中使用,因为它会产生问题。你应该说服你的首相不要这样做。下面是CanCan的创建者解释的:还要尝试将
跳过\u加载\u和\u授权\u资源
添加到
静态页面控制器
的开头,并继续使用
授权在每个操作中。但我不确定它是否有效。对,你的方法很好。但这里又出现了另一个问题。我还使用了“设计”来验证。因此,授权应用程序控制器中的\u资源也会使设备控制器(会话或注册)访问被拒绝。您可以生成设备控制器:
rails生成设备:控制器
,编辑它们并向它们添加
跳过\u加载\u和\u授权\u资源
def home
  authorize!
  ...
end