2012-01-03 43 views
6

Tôi đã ghi đè to_param phương pháp trong mô hình Category tôiĐịnh tuyến trong Rails. Chấm trong URL

def to_param 
    name 
end 

routes.rb

get '/:id' => 'categories#show', :as => :category 

Khi name tham số không chứa bất kỳ dấu chấm (foobar), tất cả các công trình đúng, nhưng khi nó không (f.o.o.b.a.r) Tôi gặp lỗi No route matches [GET]. Vì vậy, câu hỏi của tôi là: là nó có thể sử dụng dấu chấm trong định tuyến như một phần của tên tham số? Hoặc những gì tôi có thể làm để hoàn thành mục đích này, có lẽ một số móc hoặc một cái gì đó. Bất kỳ trợ giúp được đánh giá cao.

Trả lời

15

Bạn có thể thay đổi các khó khăn cho tuyến đường này:

get ':/id' => "categories#show", :as => :category, :constraints => { :id => /[\w+\.]+/ } 

Tuyến đường này bây giờ sẽ phù hợp với bất kỳ :id chuỗi chứa bất kỳ ký tự chữ hoặc một dấu chấm.

+6

Regexp đó sẽ chỉ khớp với một từ có chính xác một dấu chấm sau nó. Bạn cần sử dụng '/ [\ w \.] + /'. –

+0

Dylan: Cảm ơn, tôi đã cập nhật điều này. –

+0

Tôi không thấy đây là giải pháp. Nó phá vỡ nếu không có các ký tự không phải từ trong URL, có khả năng có ít nhất một '%' và bạn phải ít nhất có 1 dấu chấm. Nó giống như chữa đau đầu bằng cách chặt đầu. Đây là giải pháp đúng: http://stackoverflow.com/questions/5369654/why-do-routes-with-a-dot-in-a-parameter-fail-to-match – believesInSanta

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