2010-09-08 34 views
17

Tôi có thể nhận tất cả các tuyến đường trong ứng dụng đường ray của mình không? Tôi cần một đầu ra như rake routes và đặt kết quả trong một mảng.cách nhận tất cả các tuyến đường trong ứng dụng đường ray của tôi?

Có thể không? làm sao?

+1

Bạn cần đầu ra này ở đâu? – jordinl

+2

Đối với Rails 3: 'Rails.application.routes.routes.to_a' (xem [câu trả lời gốc của tôi] (http://stackoverflow.com/a/10576105/407213)) – Dorian

Trả lời

15

Bạn có thể xem cách đường ray phun ra các tuyến đường đó từ tác vụ rake. Đó là trong /gems/rails/2.3.x/lib/tasks/routes.rake cho Rails 2. Dường như về cơ bản làm ActionController::Routing::Routes.routes trong trường hợp chung và sau đó thẩm vấn điều đó.

+2

Đối với Rails 4, nó bây giờ là trong đá quý – Neikos

10

Vâng, một cách độc lập về nơi bạn cần đến nó, bạn có thể làm:

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

Hoặc thậm chí:

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

Để truyền bá đau đầu rằng đó là để acomplish rằng, tôi đã làm điều này dựa trên @jordini 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 

Đây là những gì tôi đã sử dụng để tạo tất cả các quyền cho trang web của tôi cùng một lúc.

Các vấn đề liên quan