Ruby on rails GET和POST的路由名称无效
我正在学习为Rails 3编写的一个较旧的教程。我使用的是Rails 4.1.4 其中一个说明是更改routes文件以包括以下内容:Ruby on rails GET和POST的路由名称无效,ruby-on-rails,Ruby On Rails,我正在学习为Rails 3编写的一个较旧的教程。我使用的是Rails 4.1.4 其中一个说明是更改routes文件以包括以下内容: get '/boards/:board_id/conversations/:id/reply' => "conversations#reply", :as => :reply_board_conversation post '/boards/:board_id/conversations/:id/reply' => "conversations#
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'
在我看来,这条路线似乎在某种程度上试图复制一个新动作的行为,并创造动作。获取用于新建,发布用于使用单个路由创建。
问题是,我不知道如何重写路由才能正常工作。我在谷歌上搜索过解决方案,但似乎什么也找不到。如果有人能为我指出正确的方向,我将不胜感激。看起来唯一的问题是重复的“命名路线”名称
回复板\u对话。所以你可以简单地改变一个。我可能会将保存版本重命名为save\u reply\u board\u conversation
。那么它应该会起作用。记住以后要以这种方式参考路线。这将主要用于表单标记中。因此,对于exmaple:
<= form_tag :url => save_reply_board_conversation_path do %>
save\u reply\u board\u conversation\u path do%>
注意使用save\u reply\u board\u conversation\u path
而不是reply\u board\u conversation\u path
,因为表单将提交POST请求而不是GET请求。这些路由的名称应该不同,尽管URL的组成是相同的,所以您实际上只需要一个名称第一个
命名路由的诀窍在于它们只生成URL,而不设置HTTP请求方法。这必须独立完成
这意味着您可以通过两种不同的方式调用同一命名路由:
<%= link_to('View', board_path(@board)) %>
<%= link_to('Delete', board_path(@board), method: :delete) %>
它们实际上呈现为相同的URL,但其中一个将点击GET
路径,另一个点击DELETE
one