Есть ли способ убедиться, что пользовательский маршрут распознается методом *_path
?
У меня есть ресурс и собственный маршрут к тому же контроллеру:
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
Если не использовать /
для разделения cat, id и slug, он будет работать нормально, но при использовании /
метод 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]+\/.+/
в конец моего маршрута к ресурсам, это позволяет использовать /
, но поскольку он просто использует регулярное выражение, я не могу получить параметр :cat
из URL
Итак, есть ли способ убедиться, что мой пользовательский маршрут распознается методом news_path
?