Khi định tuyến tài nguyên trong Rails, thuộc tính định dạng tùy chọn được tự động nối vào các tuyến được tạo. Điều này là để tài nguyên được đề cập có thể được yêu cầu dưới dạng XML, HTML, vv Các định dạng nào thực sự được cho phép thường được mô tả trong bộ điều khiển bằng cách sử dụng respond_to
.Cách giới hạn định dạng tài nguyên trong tệp tuyến đường Rails
Nhưng trong nhiều trường hợp, bạn chỉ muốn hỗ trợ HTML và cảm thấy như một chi phí để viết respond_to :html
trong mọi hành động trong mọi bộ điều khiển. Do đó, sẽ rất tuyệt nếu có cách nào giới hạn các loại nội dung được phép khi tạo các tuyến đường trong tệp routes.rb, ví dụ:
map.resources :users, :formats => :html
map.resources :users, :formats => [:html, :xml]
map.resources :users, :formats => {:index => :html, :show => [:html, :xml]}
Có cách nào để đạt được điều này hoặc nguồn gốc hoặc thông qua plugin không?
P.S. Cách thông thường để giải quyết vấn đề này là bỏ qua vấn đề và không sử dụng respond_to
trong các hành động. Nhưng điều này thực sự không giới hạn các loại nội dung được cho phép. Thay vào đó nó chỉ hy vọng rằng một mẫu tồn tại trong thư mục views cho mỗi kiểu nội dung có thể. Nếu không tồn tại khi được yêu cầu, hệ thống sẽ phát hiện lỗi HTTP 500.
Không, 500 lỗi có nghĩa là một cái gì đó đã đi sai trên máy chủ . Nếu một kiểu nội dung không được hỗ trợ, nó không phải là lỗi máy chủ - đó là lỗi máy khách (máy khách không nên yêu cầu nó). 406 sẽ là mã phản hồi chính xác. Xem "Mã phản hồi HTTP": http://www.sitepoint.com/blogs/2008/02/04/restful-rails-part-i/ –
Chắc chắn nếu bạn định gắn thẻ .xml hoặc .html vào cuối URL và định dạng đó không được hỗ trợ thì bạn không nên tìm thấy 404. Nó có vẻ táo bạo để bỏ qua việc sử dụng conneg bằng cách tạo URL cho từng loại nội dung nhưng sau đó ăn cắp mã repsonse khi không có loại nội dung hợp lệ nào trong tiêu đề chấp nhận! –
Vâng, bạn có thể có một điểm - mặc dù đây thực sự là cách Rails hoạt động ra khỏi hộp. Nhưng tuy nhiên đây không phải là điểm của câu hỏi của tôi. Tôi vẫn muốn xác định điều này ở một vị trí trung tâm (tốt nhất là các tập tin tuyến đường) - không có vấn đề nếu sau đó một 404 hoặc 406 được trả về lỗi –