2010-04-26 42 views
5

Tôi đang tìm kiếm phương pháp để phân tích con đường tuyến đường như thế này:Đường dẫn phân tích cú pháp trong đường ray

ActionController::Routing.new("post_path").parse 
#=> {:controller => "posts", :action => "index"} 

Nó phải đối diện với url_for

UPD
Tôi đã phát hiện ra: What is the opposite of url_for in Rails? A function that takes a path and generates the interpreted route?

ActionController::Routing::Routes.recognize_path("/posts") 

Vì vậy, bây giờ tôi cần phải chuyển đổi posts_path vào "/ bài viết"

Trả lời

5

Có phương pháp này:

>> ActionController::Routing::Routes.recognize_path("/posts/") 
=> {:action=>"index", :controller=>"posts"} 

Nếu bạn chỉ có một chuỗi với tuyến đường của bạn (như "posts_path"), sau đó tôi đoán trong bối cảnh mà bạn đang sử dụng này, bạn sẽ có thể làm

ActionController::Routing::Routes.recognize_path(send("posts_path".to_sym)) 

btw này đã được giáo dục đối với tôi quá :)

+0

ah bạn đã thực hiện hầu hết các công việc cho mình :) –

+1

Thx:) vì vậy, 'send (: post_path)' là gì? – fl00r

+0

đó là cách bạn gọi các phương thức có tên tùy ý trong ruby ​​:) trong trường hợp này, nếu bạn có một chuỗi như '" posts_path "', và bạn muốn nhận giá trị của phương thức 'posts_path', thì bạn chỉ cần thực hiện' send ("posts_path") '(bạn thậm chí không cần chuyển đổi thành ký hiệu). đó là một khái niệm cốt lõi trong ruby, bạn nên làm quen với điều đó :) –

12

Trong Rails 3 bạn có thể làm như sau:

Rails.application.routes.recognize_path "/accounts/1" 
# {:action=>"show", :controller=>"accounts", :id=>"1"} 

Sử dụng ActionController::Routing::Routes.recognize_path giữ ném

ActionController :: RoutingError Ngoại lệ: Không đường trận "/ chiếm/1

+0

Lưu ý điều này cũng làm việc với URL đầy đủ: 'Rails.application.routes.recognize_path 'http: // example.com/accounts/1'' – tee

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