GET和POST的路由名称无效

时间:2014-07-22 15:51:53

标签: ruby-on-rails

我正在完成为Rails 3完成的旧教程。我使用的是Rails 4.1.4。

其中一条说明是更改路线文件以包含以下内容:

get '/boards/:board_id/conversations/:id/reply' => "conversations#reply", :as => :reply_board_conversation
post '/boards/:board_id/conversations/:id/reply' => "conversations#save_reply", :as => :reply_board_conversation

显然这给了我一个错误:

Invalid route name, already in use: 'reply_board_conversation'

在我看来,这条路线在某种程度上试图复制一个新的行为并创建动作。使用单一路线获取新的和Post for create。 问题是我无法弄清楚如何重写路线以便它起作用。我用谷歌搜索解决方案,但似乎找不到任何东西。如果有人能指出我正确的方向,那将非常感激。

2 个答案:

答案 0 :(得分:1)

看起来唯一的问题是重复的"命名的路线"名称reply_board_conversation。所以你可以简单地换一个。我可能会将保存版本重命名为save_reply_board_conversation。然后它应该工作。请记住将来以这种方式参考路线。这主要用于表单标记。所以,例如:

<= form_tag :url => save_reply_board_conversation_path do %>

请注意使用save_reply_board_conversation_path而不是reply_board_conversation_path,因为表单将提交POST请求而不是GET请求。

答案 1 :(得分:1)

这些路线的名称应该不同,但由于URL的组成相同,所以您实际上只需要第一个的名称。

命名路由的技巧是它们只生成URL,它们不设置HTTP请求方法。这必须是独立完成的。

这意味着您可以通过两种不同的方式调用相同的命名路由:

<%= link_to('View', board_path(@board)) %>
<%= link_to('Delete', board_path(@board), method: :delete) %>

这些实际呈现为相同的网址,但其中一个会点击GET路由,另一个点击DELETE路由。