20

Sto lavorando a un motore montabile da utilizzare con Rails 3.1 e desidero elencare i percorsi del motore.Listing "rake routes" per un motore Rails 3.1 montabile

ho creato il motore utilizzando:

$ rails plugin new rails_blog_engine --mountable 

e modificate il file 'test/manichino/config/percorsi' di leggere:

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

... e 'config/percorsi' a leggo:

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

voglio elencare le rotte generate per ': i messaggi', ma non è chiaro come posso fare questo. Quando eseguo 'rake app: percorsi', ottengo solo la "/ blog" percorso:

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

Quando eseguo 'percorsi rake', ottengo un errore:

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

Come posso vedi i percorsi per ": post"? Posso farlo senza riscrivere le attività relative al rake?

+6

Ora, in Rails 3.2.2, 'rake app: routes' funziona bene.Un semplice 'rake routes' genera lo stesso errore, ma è previsto. – Zabba

+0

Scrivendo un motore oggi, mi sono imbattuto in questo problema, e ho appena notato che ho avuto lo stesso problema 3 anni fa! (ref il mio commento sopra) Alcune cose non cambiano mai, eh? :) – Zabba

risposta

11

Se si copia il codice dalle guide standard 3.1.0 rake routes compito nella vostra Rakefile, e cambiare la parte superiore a leggere:

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

... sostituendo RailsBlogEngine con il nome del tuo motore, poi si può ottenere un elenco di percorsi rudimentale eseguendo:

rake routes 

si noti che in Rails 3.1.1 e versioni successive, avrete bisogno di un compito newer version of the rake routes.

+1

Grazie! Ha funzionato per me Sembra strano che questo non sia incluso fuori dalla scatola. –

20

Nel caso in cui le persone sono mancanti nei commenti, come di Rails 3.2.2, è ora possibile utilizzare

$ rake app:routes 
3

Per rotaie motore 3.x, rake routes non funziona in radice del motore (è per questo che ha bisogno di qualche trucco copiando il file rake). Tuttavia, rake routes funziona sotto test/fittizio (o spec/dummy se si utilizza rspec). Elencherà tutti i percorsi che appartengono al motore in fase di sviluppo e altri motori montati.

1

Per rotaie 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 

Poi si può chiamare come

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

Grazie ... da questo sono stato in grado di capire come accedere al percorso url_helpers dal motore, per il tuo esempio '" IssueTracker :: Engine ".constantize.routes.url_helpers' con cui ho potuto" inviare "dinamicamente al assistente al percorso di cui avevo bisogno. – erroric

-1

In rotaie 3.2x Se siete in voi "host_app" e hanno montato un motore si potrebbe probabilmente elencare i percorsi eseguendo (dovrebbe funzionare fuori dalla scatola):

bundle exec rake engine_name:routes 
1

in Rails 5, ho potuto ottenere i percorsi del motore utilizzando il seguente comando:

bundle exec rake app:routes 
Problemi correlati