2012-02-16 198 views
20

我是Rails的新手,我試圖使用link_to helper來創建一個發出PUT請求而不是GET請求的鏈接。具體來說,我試圖創建一個鏈接,從管理面板中激活我的應用中的用戶帳戶。我正在使用Rails 3.0.5。Ruby on Rails link_to使用put方法

我的routes.rb文件具有:

match '/admin/users/:id/activate' => 'admin#activate_user', 
    :action => :activate_user, :via => :put 

我的視圖具有:

link_to 'Activate', :action => :activate_user, :id => user.id, :method => :put 

然而,這產生的URL(例如)/admin/users/7/activate?method=put與源代碼<a href="/admin/users/7/activate?method=put">Activate</a>

我想產生,而是<a href = "/admin/users/7/activate" data-method="put">Activate</a>

我知道我可以使用button_to,但我一直在這個問題搏鬥了一會兒,我很困惑,爲什麼我看到這種行爲,當其他教程說,我在做什麼應該是有效的。我如何才能創建一個link_to幫手來處理我想要的行爲?

回答

25

更新 - 該link_to助手將執行一個GET,除非指定一個方法。

它更好地指定確切的請求類型,而不是您的路由文件中的match。怎麼樣在的航線put更換match爲:

put '/admin/users/:id/activate' => 'admins#activate_user', :as => 'activate_user' 

link_to 'Activate', activate_user_path(user.id), method: :put 

activate_user方法應該駐留在admins控制器。 docs有關於link_to幫手的更多信息。

+1

耙路線爲上述路徑產生了什麼?你可以發佈嗎? – prasvin 2012-02-16 05:32:08

+1

這工作,謝謝!這是最乾淨的解決方案:) – maksim 2012-02-16 06:26:37

+4

這不適合我。如果在link_to中沒有定義方法,我會得到一個No route matches [GET]錯誤消息。 – ndemoreau 2012-08-14 06:10:37

30

link_to認爲:method => :put是路徑哈希的一部分。否則你必須告訴它。用括號括起你的路徑。

link_to 'Activate', {:action => :activate_user, :id => user.id}, :method => :put 

現在link_to將識別:method => :put作爲一個選項,鏈接的路徑不是一部分。

請注意,儘可能使用路由幫助而不是路徑哈希。保持事情的美好和整潔,並避免這種挑剔的情況。