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