2016-03-06 85 views
3

我試圖訪問我的引擎中的url助手來設置rack-cors。現在,我對機架中間件配置中的其中一個URL進行了硬編碼。我已閱讀the order in which Rails initializers are run,並且在加載順序的這一點上,我應該有可用的引擎路線。我想我會在活動add_routing_paths上提供它們,但是在使用pry進行挖掘後,我找不到路線。另一個讓我認爲自己做錯了的陳述是文檔說:「應用程序的某些部分,特別是路由,尚未設置在調用after_initialize塊的位置。」據this list在初始化程序中訪問Rails引擎的URL助手

  1. 需要 「配置/的boot.rb」 設置負載路徑
  2. 需要railties和發動機
  3. 定義Rails.application爲 「類MyApp的::應用<的Rails ::應用」
  4. 運行config.before_configuration回調
  5. 負載配置/環境/ ENV.rb
  6. 運行config.before_initialize回調
  7. 運行由Railties,引擎和應用程序定義的Railtie#初始化程序。 一個接一個,每個引擎設置它的加載路徑,路由並運行它的config/initializers/*文件。
  8. 通過railties,引擎和應用程序添加自定義Railtie#初始化執行
  9. 構建中間件棧和運行to_prepare回調
  10. 運行config.before_eager_load和eager_load!如果eager_load是真的
  11. 運行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 

回答

2

當路由加載後,您可以激發自己的事件,然後在初始化期間訂閱該事件以獲取路由數據。對於:

  1. config/routes.rb文件的末尾添加(外routes.draw塊)
ActiveSupport::Notifications.instrument 'routes_loaded.application' 
  • 訂閱此事件中的初始化代碼和使用網址助手!
  • ActiveSupport::Notifications.subscribe 'routes_loaded.application' do 
        Rails.logger.info Rails.application.routes.url_helpers.home_path 
    end 
    

    欲瞭解更多信息,請參閱:

    +0

    感謝您的答覆!我注意到你的鏈接指向Rails最新版本的Rails指南,第5版。我提交的原始問題和後續響應在Rails 3中尋求解決方案。 –

    +0

    啊,真的。我已經檢查過,沒有類似的Rails 3指南。但看起來,這個API已經在Rails 3中可用了:http://api.rubyonrails.org/v3.2/classes/ActiveSupport/Notifications.html 。所以解決方案也可能適用於Rails 3。 如果沒有,那麼也許可以通過在初始化程序中使用方法創建一個類來手動編寫替代方法,然後在加載路由後調用此方法。 –

    相關問題