2011-09-02 36 views
43

tôi đã thêm trong file tuyến đường:Routing với tham số tùy chọn

map.show_book "/show_book/:name/year/:year", :controller => "book", :action => "show_version" 

Tôi cũng nói thêm:

map.show_book "/show_book/:name", :controller => "book", :action => "show_version" 

để hiển thị các cuốn sách mới nhất mà không chỉ định năm.

Nhưng nó không hoạt động, nó không thể tìm thấy tuyến đường trong "show_book/NAME" nếu tôi không vượt qua năm.

Bạn có một số ý tưởng tại sao nó không hoạt động?

CẢM ƠN!

PS. tôi biết rằng tôi có thể sử dụng năm như tham số với, nhưng tôi muốn sử dụng năm như một phần của URL

Trả lời

82

Put the optional parts between parenthesis "năm = XXXX?":

map.show_book "/show_book/:name(/year/:year)", :controller => "book", :action => "show_version" 

và loại bỏ các tuyến đường thứ hai.

Cập nhật

Câu trả lời ở trên chỉ dành cho đường ray 3 trở lên. Đảo ngược hai định nghĩa tuyến đường đã khắc phục được sự cố (xem bình luận của Alessandro bên dưới).

+0

Ồ, điều này rất đơn giản, nhưng tôi nghĩ nó chỉ dành cho Rails3. Tôi quên xác định rằng dự án nằm trong đường ray 2.3. Nhưng tôi đã tìm ra rằng nó đủ để sử dụng cả hai tuyến đường, nhưng theo thứ tự đúng (tôi đã viết nó theo thứ tự sai). Cảm ơn –

+0

"Chỉ" không còn đúng, vì điều này là hợp lệ trong Rails 4, và các phiên bản tương lai có khả năng là tốt. – AlexQueue

+1

Có cách nào để có nhiều phần tùy chọn trong cùng một tuyến đường với một thứ tự không xác định không? Soa dài dòng ... map.show_book "/ show_book /: name ((/ năm /: năm) (/ ngày /: ngày))" –

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