rails不会调用引擎的控制器

时间:2017-03-30 08:26:21

标签: ruby-on-rails rspec devise ruby-on-rails-5

我正在尝试定义一些辅助方法,以便在应用程序的控制器中使用,但似乎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,但结果是一样的!

2 个答案:

答案 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获得),这对我来说是完美的(但不要知道如果有人需要它,如何将它添加到课程的乞讨中)