2014-07-22 53 views
0

我正在完成一個針對Rails 3完成的舊教程。我正在使用Rails 4.1.4。GET和POST的無效路由名稱

其中一個指令是改變路線文件,包括以下內容:

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' 

在我看來,該航線以某種方式嘗試複製新行爲並創建行爲。獲取新建和發佈以創建單一路線。 問題是我無法弄清楚如何重寫路線,所以它的工作原理。我已經搜索瞭解決方案,但似乎無法找到任何東西。如果任何人都可以指出我正確的方向,將非常感激。

回答

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請求。

+0

謝謝,這讓我朝着正確的方向前進 –

1

這些路線的名稱應該是不同的,因爲雖然該URL的組成是一樣的,所以你真正需要的只是第一個名字。

與命名路由的訣竅是,他們只生成URL,他們不設置HTTP請求方法。這必須獨立完成。

這意味着你可以調用同名路線兩種不同的方式:

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

這些實際上呈現爲相同的URL,但一會打GET路線,其他的DELETE之一。