在Rails中路由資源時,可選的format屬性會自動附加到生成的路由。這樣就可以將請求的資源作爲XML,HTML等請求。實際允許的格式通常在控制器中使用respond_to
進行描述。如何限制Rails路由文件中的資源格式
但在很多情況下,您只需要支持HTML,並且感覺在每個控制器的每個操作中都會寫入respond_to :html
開銷。因此,當在routes.rb文件中構建路由時,如果有方法限制允許的內容類型,則會很酷,例如,
map.resources :users, :formats => :html
map.resources :users, :formats => [:html, :xml]
map.resources :users, :formats => {:index => :html, :show => [:html, :xml]}
有沒有辦法通過本地或通過插件來實現?
P.S.解決此問題的常用方法是忽略該問題,並且不要在操作中使用respond_to
。但是這實際上並不限制允許的內容類型。相反,它只是期望在每個可能的內容類型的視圖目錄中存在一個模板。如果請求時不存在,系統將拋出HTTP 500錯誤。
不,一個500錯誤意味着發生了錯誤的服務器上。如果內容類型不受支持,則不是服務器錯誤 - 這是客戶端錯誤(客戶端不應該請求它)。 406將是正確的響應代碼。請參閱「HTTP響應代碼」:http://www.sitepoint.com/blogs/2008/02/04/restful-rails-part-i/ – 2009-09-03 16:58:47
當然,如果您打算在末尾標記.xml或.html該URL和該格式不被支持,那麼你應該返回404找不到。通過爲每種內容類型創建URL來忽略conneg的使用似乎有點厚顏無恥,但是當在accept頭中沒有有效的內容類型時竊取repsonse代碼! – 2009-09-03 18:31:34
好吧,你可能有一點 - 即使這實際上Rails是如何工作的。但是,這不是我的問題的重點。我仍然想在一箇中心位置(最好是路由文件)中指定它 - 無論如何404或406返回錯誤 – 2009-09-03 18:47:09