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

前端之家收集整理的这篇文章主要介绍了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

希望这会帮助你!

原文链接:/ruby/265889.html

猜你在找的Ruby相关文章