如何在所有控制器和操作之外运行before_action?
我有一个rails 4.2.x app,设计用于身份validation – 我有几个控制器。
我想要设计authenticate_user! 除了在主控制器索引操作之外的所有控制器和操作上运行的方法。 (当然,authenticate_user!本身需要注意设计登录等操作)
我可以确保每个控制器操作都在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
但我不知道如何让home / index成为例外。
当然,我可以手动添加before_action :authenticate_user!
到每个控制器,并为主控制器添加一个exception以进行索引操作。 但这不是很干,如果我添加新的控制器,我需要记住将这个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
希望对你有帮助 !