ruby-on-rails – 在初始化程序中访问Rails引擎的URL帮助程序

我正在尝试访问我的引擎中的url助手以设置
rack-cors.现在,我已经为机架中间件配置中的一个URL硬编码了字符串.我已阅读
the order in which Rails initializers are run,此时在加载顺序中我应该有可用的引擎路径.我想我会在add_routing_paths事件中找到它们,但是在使用pry挖掘后我找不到路线.另一个让我认为我这样做不正确的声明是文档说:“应用程序的某些部分,特别是路由,尚未设置在调用after_initialize块的位置.”根据
this list

>需要“config / boot.rb”来设置加载路径
>需要铁路和发动机
>将Rails.application定义为“class MyApp :: Application< Rails :: Application”
>运行config.before_configuration回调
>加载config / environments / ENV.rb
>运行config.before_initialize回调
>运行由铁路,发动机和应用定义的Railtie#initializer.
每个引擎一个接一个地设置其加载路径,路由并运行其config / initializers / *文件.
>执行铁路,引擎和应用程序添加的自定义Railtie#初始化程序
>构建中间件堆栈并运行to_prepare回调
>运行config.before_eager_load和eager_load!如果eager_load为真
>运行config.after_initialize回调

我试图挂钩(7),但也许路线直到(11)才可用?

module Zillow
  class Engine < ::Rails::Engine
    isolate_namespace Zillow

    # Rails.application.routes.url_helpers

    initializer "zillow.cors", after: :set_routes_reloader do |app|
      require 'pry'; binding.pry
      app.config.app_middleware.insert_before 0, Rack::Cors do
        allow do
          origins 'localhost:3000'
          resource '/zillow/search_results', methods: :get
        end
      end
    end
  end
end

这是我路线的输出

zillow  /zillow Zillow::Engine

Routes for Zillow::Engine:
              api_deep_comps GET /api/deep_comps(.:format)               zillow/api#deep_comps
               api_zestimate GET /api/zestimate(.:format)                zillow/api#zestimate
          api_search_results GET /api/search_results(.:format)           zillow/api#search_results
api_updated_property_details GET /api/updated_property_details(.:format) zillow/api#updated_property_details

最佳答案 您可以在加载路由时触发自己的事件,然后在初始化期间订阅该事件以获取路径数据.为了那个原因:

>将此添加到config / routes.rb文件的末尾(routes.draw块之外)

ActiveSupport::Notifications.instrument 'routes_loaded.application'

>在初始化代码中订阅此事件并使用URL帮助程序!

ActiveSupport::Notifications.subscribe 'routes_loaded.application' do
  Rails.logger.info Rails.application.routes.url_helpers.home_path
end

有关更多信息,请参阅

> Subscribing to an event
> Creating custom events

点赞