2013-12-05 2 views
1

TLDR; Мне нужно, чтобы мой new_topic_post_path ссылку/tennis/publishвместо/tennis/newЛюбой способ изменить new_post_path по умолчанию «/ new» url?

я определил пользовательский маршрут routes.rb:

match '/:topic_id/publish', to: 'posts#new', via: [:get, :post] 

Но все new_topic_post_path(topic) возвращает ссылку:

http://localhost:3000/tennis/new 

Однако , по косметическим причинам мне нужен URL-адрес, чтобы он выглядел так:

http://localhost:3000/tennis/publish 

Любые идеи? Большие оценки за любые ответы. Заранее спасибо.

(Также ..., если это не представляется возможным, есть ли способ, чтобы добавить строку в link_to, такие как: link_to post.name, post(/publish) достичь подобного результата я пытался бесчисленные вариации, но не смог найти путь)

Edit:. Кроме того, у меня ссылки в

<% all_topics.sort { |a,b| a.name <=> b.name }.each do |topic| %> 
    <%= link_to topic.name, new_topic_post_path(topic) %> 
<% end %> 

Так прямой link_to "tennis/publish не подходящие, ле.

ответ

2
match '/:topic_id/publish', to: 'posts#new', via: [:get, :post], as: publish_topic 

Затем используйте publish_topic_path маршрут хелпер.

Также вы можете сделать:

resources :posts, path_names: { new: 'publish' } 
+0

'resources: posts, path_names: {new: 'publish'}' работал на месте. Спасибо! – Kasperi

0

Попробуйте это ...

resources :tennis, path_names: { new: 'publish' }

Я не уверен, как это сделать для всех, хотя.

0

Вам нужно воспользоваться :as вариантом, который используется для создания помощников маршрутизации, в файле routes.rb, например, так:

match '/:topic_id/publish', to: 'posts#new', via: [:get, :post], as: 'new_topic_post' 

Вы можете узнать больше о возможностях для #match метода здесь: http://api.rubyonrails.org/classes/ActionDispatch/Routing/Mapper/Base.html#method-i-match

Смежные вопросы