2010-08-04 26 views
6

Tôi đã theo con đường sau đây định nghĩa:Tôi làm cách nào để có được tuyến đường ray để giữ phần mở rộng như một phần của id?

map.resources :images, :only => [ :index, :new, :destroy ] 

khi tôi làm một rake routes tôi nhận được như sau:

image DELETE /images/:id(.:format) {:action=>"destroy", :controller=>"images"} 

Vấn đề của tôi là, tôi muốn sử dụng tên tập tin như :id tôi bao gồm bất kỳ phần mở rộng . Tại thời điểm này id của tôi đang nhận được để điều khiển trừ đi phần mở rộng. Có cách nào tôi có thể tùy chỉnh map.resources ở trên để tạo ra các đường dẫn sau:

image DELETE /images/:id {:action=>"destroy", :controller=>"images"} 

ví dụ: không có phần mở rộng sử dụng như :format?

Trả lời

4

Nhân vật . được định nghĩa trong ActionController::Routing::SEPARATORS, trong đó liệt kê đặc biệt ký tự để tách URL trên.

Nếu bạn muốn tránh tách URL tại số ., bạn cần phải vượt qua đối số :constraints => { :id => /regexp/ } để map.resources.

Xem my related question and answer để biết thêm thông tin.

+0

Cảm ơn, thêm regex đã làm các trick. – tpower

+2

để sử dụng Rails3: các ràng buộc thay vì: yêu cầu –

1

tôi không thể tìm ra cách để vượt qua id nguyên vẹn với bộ điều khiển nhưng đây là công việc xung quanh tôi đã sử dụng để tái tạo lại id:

id = [ params['id'], params['format'] ].compact.join '.' 
+0

Điều này giả định tên tệp của bạn tuân theo định dạng filename.ext rất nghiêm ngặt, nhưng khi bạn phơi bày điều này với người dùng, chúng có thể chứa dấu cách, nhiều dấu chấm và ai biết được điều gì khác sẽ giúp bạn trong URL mà không cần thoát. – tadman

+0

Đúng, tôi nên thêm một số mã hóa URL. – tpower

+0

tốt, điều này làm việc để có được các dữ liệu ban đầu, nhưng Rails vẫn sẽ cố gắng tìm một renderer cho 'định dạng', mà có thể là nonse – Tilo

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