我在Rails應用程序中使用文本永久鏈接作爲資源的ID,獲得了RESTful設置。在Ruby on Rails中創建新資源時驗證沒有路由重疊
此外,還有一些特殊的命名路線以及它與命名的資源如重疊:
# bunch of special URLs for one off views to be exposed, not RESTful
map.connect '/products/specials', :controller => 'products', :action => 'specials'
map.connect '/products/new-in-stock', :controller => 'products', :action => 'new_in_stock'
# the real resource where the products are exposed at
map.resources :products
的Product
模型使用permalink_fu基於名稱產生永久鏈接,並ProductsController
進行查找在訪問時的永久鏈接字段。這一切都很好。
但是,當在數據庫中創建新的Product
記錄時,我想驗證生成的永久鏈接確實是而不是與特殊的URL重疊。
如果用戶嘗試創建一個名爲specials
或new-in-stock
甚至像new
或edit
正常的Rails的RESTful資源的方法的產品,我想控制器來查找路由配置,該模型對象上設置錯誤,驗證失敗了新記錄,而不是保存它。
我可以硬編碼一個已知非法固定鏈接名稱的列表,但這樣做似乎很麻煩。我寧願掛鉤到路由中來自動執行。
(控制器和型號名稱變更爲保護無辜者,並使其更容易回答,實際設置更復雜得多,這個例子)
這似乎是要走的路,但我不會擔心模型中的路由/控制器邏輯,並試圖將其分離出來。事實是,在你的系統中,模型*確實依賴於路由 - 如果它與另一條路由發生衝突,它就不是一個有效的模型。 – ideasasylum 2009-07-14 11:26:02