我正在完成为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。 问题是我无法弄清楚如何重写路线以便它起作用。我用谷歌搜索解决方案,但似乎找不到任何东西。如果有人能指出我正确的方向,那将非常感激。
答案 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
路由。