2010-09-08 20 views
17

Raylarımdaki tüm rotaları alabilir miyim? rake routes gibi bir çıktıya ihtiyacım var ve sonucu bir diziye koyuyorum.Raylarım uygulamalarındaki tüm rotaları nasıl alabilirim?

Mümkün mü? Nasıl?

+1

Bu çıktıya nerede ihtiyacınız var? Raylar 3 için – jordinl

+2

: 'Rails.application.routes.routes.to_a' (bakınız [benim orijinal cevap] (http://stackoverflow.com/a/10576105/407213)) Raylar 4 için – Dorian

cevap

15

Rails, rake görevinden bu rotaları dışarı çıkarır. Raylar 2 için /gems/rails/2.3.x/lib/tasks/routes.rake içinde. Genel durumda ActionController::Routing::Routes.routes yapıyor ve sonra sorguya çekiyor gibi görünüyor.

+2

o railties mücevher şimdi – Neikos

10

Eh, bağımsız İhtiyacınız nerede, bunu yapabilirsiniz: hatta

routes = `rake routes`.split("\n") 

Veya:

routes = `rake routes`.split("\n").map{ |r| r.gsub(', ', ',').split(' ') } 
5

baş ağrısı yaymak amacıyla o Tamamladılar etmek olduğunu, ben bunu jordini temelli: answer:

Rails.application.routes.routes.to_a.each do |rota| 
    if rota.app.instance_variable_defined? '@defaults' 
     perm = Permission.where({ 
     :acao => rota.defaults[:action], 
     :controller => rota.defaults[:controller], 
     :verbo => rota.verb.source.to_s.gsub("^","").gsub("$","").downcase 
    ).first_or_create 
    end 
end 

Bu, web sayfam için tüm izinleri bir kerede oluşturduğum şeydi.

İlgili konular