有沒有辦法確保*_path
方法識別自定義路線?未能通過* _path方法識別的導軌3自定義路線
我有一個資源,並在同一控制器的自定義路線:
resources :news, :only => [:index, :show], :path => :nieuws
match '/nieuws/:cat/:id/:slug', :to => 'news#show'
match '/nieuws/:id/:slug', :to => 'news#show'
這是工作的罰款,並要求http://www.example.com/nieuws/category/1/slug
時,它會顯示正確的新聞項目。問題是我想用news_path
方法鏈接到我的新聞項目。要做到這一點我有下面的代碼添加到我的新聞產品型號:
def to_param
if news_category
"#{news_category.slug}/#{id}/#{slug}"
else
"#{id}/#{slug}"
end
end
當不使用/
到單獨的貓,ID和蛞蝓它會正常工作,但使用/
當news_path方法失敗,請求的頁面顯示:
No route matches {:action=>"show", :controller=>"news", :id=>#<NewsItem id: 1...etc
我rake routes
輸出:
news_index GET /nieuws(.:format) {:action=>"index", :controller=>"news"}
news GET /nieuws/:id(.:format) {:action=>"show", :controller=>"news"}
/nieuws/:cat/:id/:slug(.:format) {:controller=>"news", :action=>"show"}
/nieuws/:id/:slug(.:format) {:controller=>"news", :action=>"show"}
我已經嘗試添加, :id => /[0-9]+\/.+/
我的資源路徑的終點,這使得/
的使用,但因爲它只是使用正則表達式,我無法從URL
因此得到:cat
參數,是有辦法,以確保我的自定義路線被news_path
方法識別?
感謝您的回答,但你給我的解決方案將產生一個看起來像這樣的鏈接:www.example.com/nieuws/2?cat = category&slug = slug'。我試圖達到的目標是:www.example.com/nieuws/category/2/slug或者www.example.com/nieuws/2/slug'。有沒有另一種方法來做到這一點,仍然使用'news_path'或是唯一的解決方案在我的模型中創建自己的url/path方法? – christiaanderidder
您可以使用':as'選項製作命名路線,然後使用它們而不是'news_path'方法。 – phoet
感謝您的回覆! – christiaanderidder