我正在尝试定义一些辅助方法,以便在应用程序的控制器中使用,但似乎rails甚至不会调用控制器。只是为了测试我在我的app/controllers/my_engine/application_controller.rb
中有以下控制器,并且文件说rails应该首先找到它并且错误应该引发因为THIS_SHOULD_PRODUCE_ERROR
未知,但rspec
幸福地执行没有任何错误!
class ApplicationController < ActionController::Base
THIS_SHOULD_PRODUCE_ERROR
end
我甚至试图模仿devise's way,但结果是一样的!
答案 0 :(得分:1)
guide section on the app directory表示引擎中的application_controller
&#34;将为引擎的控制器提供任何常用功能&#34;。
所以我不希望该控制器的所有添加内容都可供应用程序中的所有控制器使用。
这也意味着,我怀疑,当您正在运行测试时,application_controller
不会被调用。这可以解释为什么你没有看到错误。
就设计方式而言,我认为你需要关注define_helpers
的工作原理。您在问题中链接的代码是设计宝石中的应用程序控制器。
答案 1 :(得分:0)
我注意到我出错了,引擎中的application_controller
没有应用到应用中的application_controller
!此外,我无法弄清楚设计是如何做到的,但我已经为此提出了简单的解决方法:
require_relative 'controllers/helpers'
module Acu
module Injectors
class << self
ActiveSupport::Notifications.subscribe "start_processing.action_controller" do |**args|
eval((Acu::Configs.get :base_controller).to_s).class_eval do
include Acu::Controllers::Helpers
end
end
end
end
end
这将在课程结束时将控制器助手注入用户的基本控制器(我从用户default: :ApplicationController
获得),这对我来说是完美的(但不要知道如果有人需要它,如何将它添加到课程的乞讨中)