2012-11-26 31 views
0

非常新的紅寶石軌道上,並試圖讓我的第一個Ajax調用工作。它正在進行ajax調用,但它總是調用#index操作,似乎忽略了URL參數。下面的代碼:自定義操作不會使用link_to與遠程=真正的觸發

class UserController < ApplicationController 
def flag 
    logger.debug "in flag user" 
    respond_to do |format| 
     format.js { render :layout=>false } 
    end 
    end 
end 

在我routes.db:

resources :users do 
    member do 
     post 'flag' 
     get 'flag' 
    end 
    end 

然後在我看來,我創建這樣的鏈接:

<%= link_to "Flag User", :url => flag_user_path(user.id), :method => :get, :remote => true %> 

HTML源代碼是:

<a href="/users?method=get&amp;url=%2Fusers%2F1%2Fflag" data-remote="true">Flag User</a> 

rake routes產生此:

flag_user POST /users/:id/flag(.:format) users#flag 
      GET /users/:id/flag(.:format) users#flag 

每當我點擊鏈接,user#index方法總是得到執行。我如何獲得用戶#標記方法執行?

+0

您可以包含它爲該鏈接創建的html嗎? –

+0

我用html和rake路由更新了這個問題 –

回答

1

問題出在:url符號。我改變:

<%= link_to "Flag User", :url => flag_user_path(user.id), :method => :get, :remote => true %> 

到:

<%= link_to "Flag User", flag_user_path(user.id), :method => :get, :remote => true %> 

,一切工作進行了展望。我錯誤地使用它,如link_to_remote,它需要:url符號。感謝大家的意見。

0

如果你運行rake路線,我想你會看到名爲「flag_user_path」創建的路線預計「後」而不是「得到」

+0

我試着將link_to helper的「method」參數改爲:發佈但得到相同的結果。 <%= link_to「標記用戶」,:url => flag_user_path(user.id),:method =>:get,:remote => true%>。如果我查看服務器日誌,我仍然可以看到它請求GET。 –

+0

你剛纔在評論中包含的代碼也有「get」的方法。 –

+0

如果您使用'button_to'而不是'link_to',它會自動發佈,而不是得到... –

1

的問題是你如何定義你的路由。它需要是這樣的,

resources :users do 
    post 'flag' 
    get 'flag', on: :member 
end 

檢查導軌指南的路由獲得更多的想法。

+0

它在「成員做」內,因此應該與以下人員相同: =>:成員。我已經嘗試了兩種方法,結果相同(在刪除「成員做」之前,您的代碼實際上不起作用。 –

相關問題