我有一個CMS風格的應用程序,用戶可以在其中設置自定義網址並將其路由到我們的「content_pages」控制器。通配符路由中的格式約束條件
爲了支持這個,我們定義了3條通配符路由。
我試圖限制這些通配符,以便它們只響應格式爲html,json或xml而沒有其他的請求。這源於一個問題,即缺少favicon.ico會導致一系列查詢和Web請求,因爲它會路由到content_pages控制器,然後是404s。
這是我到目前爲止,但約束根本不起作用。 (圖標仍然路由)
get "/:id/edit", to: "content_pages#edit", :constraints => {:id => /.*/, :format => "[html|xml|json]"}, as: :edit_content_page
put "/:id", to: "content_pages#update", :constraints => {:id => /.*/, :format => "[html|xml|json]"}, as: :content_page
get "/:id", to: "content_pages#show", :constraints => {:id => /.*/, :format => "[html|xml|json]"}, as: :content_page
我也想對這裏的arent包括content_pages(如/該航線指數content_pages)不會使把這個變成一個自定義的約束類,但隨後的行動。
這是之前的資源語句,用於連接其他操作。
resources :content_pages, except: [:get, :edit, :update] do
collection do
get :get_url
end
end
任何想法,我如何能夠使這個約束適用,而不會破壞我們的其他非約束行爲?
你的':id'約束可能是把格式作爲id的一部分,所以:format約束甚至沒有被評估。雖然你可以像'/.*?/'這樣做一些東西來使正則表達式懶惰並且不吃格式,它仍然會允許'.ico'文件通過。不是一個真正的答案,但希望有更多的信息來幫助你。 –