2012-01-20 39 views
10

Tôi đang có các tuyến đường như dưới đây để xóa/liệt kê một người dùng.Làm thế nào để mã hóa (.) Dot trong url Rails

map.connect 'developer/:user_name/delete',:controller=>"developers",:action=>"delete",:method=>:delete 

map.connect 'developer/:user_name/list',:controller=>"developers",:action=>"list",:method=>:get 

Trong khi danh sách người dùng bằng cách mã hóa các Dot với% 2E, tôi có thể thấy phản ứng thành công

http://localhost:3000/developer/testuser%2Ehu/list 

Nhưng Trong khi cố gắng để xóa các người dùng chứa các dấu chấm (.), Ném lỗi 404 .

http://localhost:3000/developer/testuser%2Ehu/delete, how to fix this issue. 

Trả lời

2

Dấu chấm không được phép theo mặc định trong định tuyến Rails vì dấu chấm được xem là phần mở rộng của trang. Bạn nên tránh sử dụng dấu chấm trong URL.

Tuy nhiên, trong trường hợp của bạn, bạn có thể hướng dẫn Rails xem xét dấu chấm cho tham số :user_name bằng cách sử dụng cụm từ thông dụng.

map.connect 'developer/:user_name/list', :controller => "developers", :action => "list", :method=> :get, :user_name => /[\w.]+/ 

PS. Do map.connect, bạn đang sử dụng phiên bản Rails cũ (Rails < 3). Bạn nên nâng cấp ứng dụng của mình.

0

Bạn đang thực hiện yêu cầu DELETE để xóa url? Lưu ý rằng tuyến đường được xác định với :method=>:delete, vì vậy nó mong đợi yêu cầu DELETE (không GET).

+0

Tôi cũng đã xóa phương thức xóa và sau đó thử nhưng không may mắn – loganathan

18

Avdi Grimm đã viết về chủ đề này: http://avdi.org/devblog/2010/06/18/rails-3-resource-routes-with-dots-or-how-to-make-a-ruby-developer-go-a-little-bit-insane/

Bạn sẽ muốn làm một cái gì đó như thế này (tín dụng đầy đủ để avdi)

resources :users, :constraints => { :id => /.*/ } do 
    resources :projects 
    end 

Một commenter trên bài nói bạn cũng có thể làm:

resources :users, :id => /.*/ 
+0

Người nhận xét đã đúng;) –

+1

+1 'tài nguyên: người dùng,: id => /.*/' hoạt động –

+2

Điều đó không giải thích nếu bạn có/trong url, chẳng hạn như '/ search/hello + world/page/20'. Có thể tốt hơn để đi với tất cả mọi thứ nhưng a/với '/ [^ /] + /' – Tallboy

7

Tôi vừa gặp sự cố tương tự, url trang tìm kiếm của tôi là/search/search_term. Khi search_term có dấu chấm, Rails giải thích nó là định dạng yêu cầu. Nếu tôi cố tìm kiếm book.html, nó thực sự đã tìm kiếm sách, vì Rails diễn giải html dưới dạng định dạng. Định dạng không được công nhận sẽ trả về lỗi.

Trong trường hợp của tôi, giải pháp đầu tiên từ Avdi Grimm không hoạt động, vì tìm kiếm của tôi được phân trang và số trang cũng đi vào url (/ search/book/2). Các giải pháp cho tôi đã chấp nhận tất cả mọi thứ nhưng một dấu gạch chéo cho search_term (giải pháp cuối cùng từ bài viết của Avdi Grimm):

tài nguyên: người dùng,: constraints => {: id =>/[^ \ /] + /}

+1

Tôi thích câu trả lời của bạn tốt nhất, mặc dù tôi nghĩ rằng nên là '/ [^ \ /] + /' – Tallboy

+0

Cảm ơn, tôi thực sự đã gõ dấu gạch chéo ngược, nhưng nó không hiển thị trên trang. Tôi đã phải gõ 2 dấu gạch chéo ngược để hiển thị 1. –

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