有什么方法可以更改new_post_path的默认“/ new”网址?

时间:2013-12-05 19:05:45

标签: ruby-on-rails url ruby-on-rails-4

TLDR;我需要将new_topic_post_path链接指向 /tennis/publish ,而不是 /tennis/new

我已在routes.rb中定义了自定义路线:

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

但仍然new_topic_post_path(topic)会返回一个链接:

http://localhost:3000/tennis/new

但是,出于化妆原因,我需要网址看起来像这样:

http://localhost:3000/tennis/publish

有什么想法吗?对任何答案都表示赞赏。提前谢谢。

另外...... 如果不可能,有没有办法在link_to中添加字符串,例如:link_to post.name, post(/publish)以达到类似的结果?我尝试过无数种变化,但找不到办法。)

编辑另外,我正在中找到链接

 <% 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不合适。

3 个答案:

答案 0 :(得分:2)

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

然后使用publish_topic_path路线助手。

你也可以这样做:

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

答案 1 :(得分:0)

试试这个......

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

我不知道如何为所有人做这件事。

答案 2 :(得分: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