我刚刚将我的应用程序升级到Rails 5.1,但是新的skip_before_action回调行为让我感到困扰。也就是说,如果在试图跳过回调时未定义回调,则会引发错误。
我知道可以像这样传递raise: false:
skip_before_action :authorise, raise: false
但我在想是否有更好的方法来解决它。
我的主要问题是,当急切加载设置为true时,新的行为会破坏我的控制器模块化设置。
基本上,我有一个名为app/controllers/api
的目录,其中包含module_controller.rb
文件:
module Api
class ModuleController < ActionController::Base
before_action :authorise
end
end
接下来是 app_chats_controller.rb
,该文件跳过了授权回调函数:
module Api
class AppChatsController < ModuleController
skip_before_action :authorise
end
end
通过使用“急切加载”(eager load),
app_chats_controller.rb
首先被加载,这意味着回调函数尚未定义,在没有 raise: true
的情况下会引发错误。如果我必须咬紧牙关并将
raise: false
添加到每个东西中,那么就这样吧,但肯定有更好的方法...
Rails.application.config.enable_dependency_loading
设置为true
? - Lukas Eklund