Rails 5.1中的skip_before_action回调和继承

3

我刚刚将我的应用程序升级到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 添加到每个东西中,那么就这样吧,但肯定有更好的方法...
1个回答

2
尝试在app_chats_controller.rb文件顶部添加require 'module_controller'

1
那样做有点可行,但 Rails 模块解析不应该自己解决吗? - TomD
你是否将 Rails.application.config.enable_dependency_loading 设置为 true - Lukas Eklund
2
我是个白痴。在某个地方,我从ActionController::Base继承了模块控制器,而不是ApplicationController... - TomD

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接