2010-11-03 113 views
1

在一個Rails應用中,我有一個特殊的URL(/ profile)映射到用戶控制器,允許用戶查看和編輯他們的配置文件。我向路由文件中添加了以下條目,以便配置文件的「get」將路由到用戶控制器中的配置文件操作,配置文件的「post」將路由到用戶控制器中的update_profile操作。Rails路由問題

match '/profile', :to => 'users#profile', :via => "get" 
match '/profile', :to => 'users#update_profile', :via => "post" 

如果我跑耙路線我看到下面的兩個條目

profile GET /profile(.:format) {:controller=>"users", ":action=>"profile"} 
profile POST /profile(.:format) {:controller=>"users", ":action=>"update_profile"} 

如果我嘗試打dev的URL http://localhost:3000/profile它如預期帶來了個人資料頁面。如果我按表單按鈕它給了我下面的錯誤:

Routing Error 

No route matches "/profile" 

望着初始頁我看到下面的表單標籤上生成的HTML,所以它看起來動作的設置是否正確。

<form accept-charset="UTF-8" action="/profile" class="edit_user" enctype="multipart/form-data" id="edit_user_1" method="post"> 

那麼我錯過了什麼?通過查看耙路輸出,我認爲這將工作。我是否錯誤地考慮了我的http動詞?任何幫助,將不勝感激。

回答

0

我在這裏看到一些問題。

首先,這些是針對特定用戶的操作。所以路線應該可能是'profile/:id'

其次,show和update是在腳手架資源時自動生成的。重命名操作並將其映射到自定義URL有什麼好處?打破自動生成的Rails RESTful路由通常會遇到麻煩。它可以完成,但你應該有一個很好的理由去做。

第三,你的路線看起來很有趣。有一些報價不應該在那裏。當你運行耙路線時,它們是如何出現在控制檯中的?

+1

/profile的概念僅適用於當前用戶,如果您未登錄系統,則不會訪問該頁面,因此在此情況下不需要:id。我們正在使用用戶控制器生成的url來管理管理功能,這與我們希望用戶擁有自己的配置文件的用戶體驗不同。因此,系統管理員使用編輯操作來編輯現有用戶,其中配置文件操作將提供爲當前登錄的用戶定製的不同體驗。是的,這就是它在控制檯中的顯示方式。 – 2010-11-03 21:33:04

+1

這使得更多的意義。在那種情況下,唯一讓我感到有趣的是實際的路線。在之前不應該有一個報價:行動,你不同意嗎?我唯一能想到的嘗試就是始終使用雙引號。在你的路線中,你有一些字符串單引號和其他人的雙引號。它不應該有所作爲,但它是值得一試。 – Samo 2010-11-04 15:29:16