【问题标题】:rails don't calls the engine's controllerrails 不调用引擎的控制器
【发布时间】:2017-03-30 08:26:21
【问题描述】:

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

【问题讨论】:

  • 错误是什么?
  • @ashvin 这就是问题所在,没有错误,这意味着rails没有在应用程序中包含app/controllers/my_engine/application_controller.rb
  • 将你的应用控制器移动到app/controllers/application_controller这个路径

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


【解决方案1】:

guide section on the app directory 表明引擎中的application_controller“将为引擎的控制器提供任何通用功能”。

所以我不希望对该控制器的任何添加都可用于应用程序中的所有控制器。

这也意味着您的application_controller 我怀疑在您运行测试时不会被调用。这可以解释为什么您没有看到错误。


就如何设计而言,我认为您需要了解define_helpers 的工作原理。您在问题中链接到的代码是设计 gem 的测试应用程序中的应用程序控制器。

【讨论】:

  • 你说的很对,我不知道 devise 是怎么做的,但是我想出了一个解决方法,而且效果很好,我猜 :/ 将它贴在这里以备不时之需跨度>
【解决方案2】:

我注意到我弄错了,引擎中的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),这对我来说是完美的(但不知道如何将它添加到乞求如果有人需要,请上课)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-27
    • 1970-01-01
    • 2014-02-15
    • 1970-01-01
    • 2021-04-25
    相关资源
    最近更新 更多