在Devise中跳过身份验证时未定义的方法`skip_before_action'

时间:2017-09-19 05:04:10

标签: ruby-on-rails ruby devise

我正在使用本指南在Rails中设置Devise: http://codepany.com/blog/rails-5-user-accounts-with-3-types-of-roles-devise-rails_admin-cancancan/

它表示将其放在您的家庭控制器上以防止Devise在您的主页上请求身份验证:

skip_before_action :authenticate_user!, :only => [:index]

我的家庭控制器名为dev,所以我的dev_controller.rb看起来像这样:

class DevController < ApplicationController
  def index

  skip_before_action :authenticate_user!, :only => [:index]

  end
end

现在,当我访问我的网站时,我收到此错误:

undefined method `before_action' for #<MenuController:0xb193b640>

关于我为何会收到此错误的任何想法?

3 个答案:

答案 0 :(得分:5)

请尝试以下

skip_before_action应该在index方法范围之外。由于before_actionskip_before_action是一种类方法。不应该在实例方法(索引)中调用它

class DevController < ApplicationController
 skip_before_action :authenticate_user!, :only => [:index]

  def index
  end
end

refer

答案 1 :(得分:1)

由于skip_before_action是一种Class方法,因此无法从实例方法中调用它 它也称为回调方法,here是其他方法。

您可以将代码更新为

class DevController < ApplicationController
  skip_before_action :authenticate_user!, :only => [:index]

  def index
  end
end

答案 2 :(得分:0)

如果before_action似乎令人困惑,您可以使用 before_action :authenticate_user! , except:[index] ,如下所示

{{1}}