我正在尝试访问我的引擎中的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
有关更多信息,请参阅