ruby-on-rails – 如何使before_action在所有控制器和操作之外运行,除了一个?

我有一个rails 4.2.x应用程序,设计用于身份验证 – 我有几个控制器.

我想要devicate authenticate_user!在所有控制器和操作上运行的方法,除了家庭控制器索引操作. (当然,authenticate_user!本身就注意设计出一些动作,比如login through)

我可以确保每个控制器操作在application_controller.rb中运行before_action:

class ApplicationController < ActionController::Base
  before_action :authenticate_user!
  ...
end

我还可以在所有控制器上限制一组特定的操作:

class ApplicationController < ActionController::Base
  before_action :authenticate_user!,except: [:index]
  ...
end

但是我看不到如何使家庭/索引成为例外.

我当然可以手动添加before_action:authenticate_user!到每个控制器,并为索引操作的归属控制器添加一个异常.但是这不是很干,如果我添加新的控制器,我需要记住将这个before_action添加到它们中.

解决方法

要做的是设置autheticate_user!在所有控制器上:
class ApplicationController < ActionController::Base
  before_action :authenticate_user!
  ...
end

然后在您的HomeController上,您可以这样做:

class HomeController < ApplicationController
  skip_before_action :authenticate_user!,only: [:index]
  ...
end

希望这会帮助你!

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...