20

Rails 3.1用のマウント可能なエンジンで作業しています。エンジンのルートをリストしたいと思います。マウント可能なRails 3.1エンジンのための 'rake routes'のリスト

私が使用してエンジンを作成しました:

$ rails plugin new rails_blog_engine --mountable 

を、読み 'テスト/ダミー/設定/ルート' ファイルを編集した:

Rails.application.routes.draw do 
    mount RailsBlogEngine::Engine => "/blog" 
end 

を...と '設定/ルート' へ私は生成されたルートリストしたい

RailsBlogEngine::Engine.routes.draw do 
    resources :posts 
end 

:読み取り「:ポスト」を、それは私がこれを行うことができますどのように明確ではありません。私は「すくいアプリ:ルート」を実行すると:私は「すくいルート」を実行すると、私はエラーを取得する

$ rake app:routes 
rails_blog_engine /blog {:to=>RailsBlogEngine::Engine} 

$ rake routes 
rake aborted! 
Don't know how to build task 'routes' 

どのようにすることができ、私は唯一の「/ブログ」ルートを取得します':posts'のルートを参照してください。関連するレーキタスクを書き直すことなくこれを行うことはできますか?

+6

を今、Railsの3.2.2、 'すくいアプリで:正常に動作しますroutes'。シンプルな「レーキルート」は同じエラーを投げますが、それは予想されます。 – Zabba

+0

今日、エンジンを書くと、この問題に遭遇しました。私は3年前に同じ問題が発生したことに気付きました! (上の私のコメントを参考に)いくつかのことは変わらない、ええ? :) – Zabba

答えて

11

あなたのRakefileに標準のRails 3.1.0 rake routesタスクからコードをコピーして、読むために上部を変更する場合:あなたはその後、

task :routes => 'app:environment' do 
    Rails.application.reload_routes! 
    all_routes = RailsBlogEngine::Engine.routes.routes 

を...あなたのエンジンの名前でRailsBlogEngineを交換します実行することで、ルートの基本的なリストを取得することができます:Railsの3.1.1以降では、あなたがnewer version of the rake routesタスクが必要になります

rake routes 

注こと。人々はコメント欄でそれが欠落している場合には

+1

ありがとう!私のために働いた。奇妙なことに、これは箱の外には含まれないだろうと思う。 –

20

Rails 3.2.2のように、あなたは今rake routesが、それはいくつかのハックを必要とする理由です(エンジンのルートの下では動作しません、レール3.xのエンジンについて

$ rake app:routes 
3

を使用することができますrakeファイルをコピーして)。しかし、rake routesはtest/dummy(またはrspecを使用している場合はspec/dummy)で動作します。開発中のエンジンに搭載されているすべてのパッセンツと、搭載されている他のエンジンを一覧表示します。レール3

desc 'Print out all defined routes inside engine match order, with names. Target specific controller with CONTROLLER=x.' 
    task engine_routes: :environment do 
    Rails.application.reload_routes! 
    app = ENV['ENGINE'] || "Rails.application" 
    all_routes = app.constantize.routes.routes 
    require 'rails/application/route_inspector' 
    inspector = Rails::Application::RouteInspector.new 
    puts inspector.format(all_routes, ENV['CONTROLLER']).join "\n" 
    end 

Railsの4

desc 'Print out all defined routes inside engine match order, with names. Target specific controller with CONTROLLER=x.' 

    task engine_routes: :environment do 
    app = ENV['ENGINE'] || "Rails.application" 
    all_routes = app.constantize.routes.routes 
    require 'action_dispatch/routing/inspector' 
    inspector = ActionDispatch::Routing::RoutesInspector.new(all_routes) 
    puts inspector.format(ActionDispatch::Routing::ConsoleFormatter.new, ENV['CONTROLLER']) 
    end 

については

1

あなたはあなたの中に "host_app" であり、持っているなら、あなたはレール3.2倍 で

$rake engine_routes ENGINE="IssueTracker::Engine" 
+0

ありがとうございました...これからは、エンジンからurl_helpersルートにアクセスする方法を知ることができました。例えば、 "IssueTracker :: Engine" .constantize.routes.url_helpers'では、パスヘルパーが必要でした。 – erroric

-1

のように呼び出すことができますあなたはおそらく実行することによってルートを列挙することができるエンジンをマウントしました(箱からうまくいくはずです):

bundle exec rake engine_name:routes 
1

レール5に、私は、次のコマンドを使用してエンジンのルートを得ることができます:

bundle exec rake app:routes 
関連する問題