2011-11-10 37 views
1

我正在玩測試軌道應用。然而,我偶然發現了一個我無法解決的問題。 我有一個用戶控制器,裏面有一個激活方法。Rails 3.1沒有路由匹配控制器和動作,但它們存在

在routes.rb中文件我有

match 'activate/:email/:validation_code' => 'users#activate', :as => :activate_user, :via => :get 

之後,我嘗試使用activate_user_path(@user)但路由出現錯誤。

No route matches {:controller=>"users", :action=>"activate", :email=>#<User id: 12, email: "[email protected]", validation_code: "zbBPLQUsBgPvEJfcjxmXuxFxuJAKEoqQNASkbybihpnmzSbhxdC...", active: false, created_at: "2011-11-10 14:56:23", updated_at: "2011-11-10 14:56:23">}

運行rake routes顯示路由的有:

activate_user GET /activate/:email/:validation_code(.:format) {:controller=>"users", :action=>"activate"}

我試圖尋找這個問題,但通常這時候你忘了傳遞對建設路線所需要的對象發生。

所有幫助表示讚賞:)

+0

你可以發佈完整的錯誤消息,而不是用'...'拖尾,它的重要性在哪裏? – meagar

+0

對不起,沒想到這很重要。其餘部分包含用戶對象的其他字段。我現在將編輯帖子以包含它們。 – zbrox

回答

1

我會確保你實際上是在調用一個GET而不是POST的方法。

如果您要提交表單,則默認爲POST,這意味着您沒有匹配的路由,上面列出的路由僅適用於GET請求。

+0

實際上,在使用'activate_user_path(@user)'在視圖中構建鏈接時發生這種情況,因此不需要調用那裏的請求。如果我在瀏覽器地址欄中手動鍵入URL,則會發生同樣的情況 - 沒有路由匹配。 – zbrox

0

activate_user_path(:email => @ user.email,:validataion_code => @ user.validation_code)是否適合您?

編輯

我不知道爲什麼,但我已經改變了: validation_code編寫它的工作原理。

match 'activate/:email/:code' => 'users#activate', :as => :activate_user, :via => :get 

大概在rails中,你不能在具有下劃線的路由中使用var名稱,但這必須進行驗證。

+0

在發佈到SO之前,我也試過了。結果是一樣的。唯一的區別是錯誤的轉儲,它不列出整個對象,但只有這兩個傳遞的屬性。 – zbrox

+0

我編輯了我的repsonse,現在檢查。 – sparrovv

+0

我試過這個,但無濟於事。 – zbrox

相關問題