2014-01-28 54 views
0

我想通過使用POST方法的jQuery傳遞一個變量,將它存儲到控制器,然後在Rails HTML中使用相同的變量來查詢表。如何使用Ajax發佈到Rails?

它似乎沒有將變量傳遞給控制器​​。

的jQuery:

var id = 1; 

$.post("http://localhost:3000/teamplayers", {'ids': ids}); 

Teamplayers控制器:

def index 
    @teamplayers = Teamplayer.all 
    @ids = params[:id] 
end 

Rails的HTML:

<select id = "test3" style= float:right size= 10> 
<% Teamplayer.find_each(:conditions => "teamid = @ids") do |tp| %> 
    <option> <%#[email protected] %></option> 
    <option>Players on team 1</option> 
<% end %> 
</select> 

而且,我試着用以下的Ajax方法,但它貼在我的網頁回我分配給它的標籤。

阿賈克斯:

$(document).ready(function(){ 
    $("button").click(function(){ 
     $.ajax({url:"http://localhost:3000/teamplayers",success:function(result){ 
     $('#div1').text(result); 
    }}); 
}); 
}); 

什麼是錯的,我使用POST或者阿賈克斯的方式嗎?

+0

這不是一個POST它是一個GET。但是你可能只需要一個'$('#div1').load(blah blah blah)'來打一個服務器並將結果加載到一個div中。 – Phlip

+0

加載我的網頁的HTML,我想通過我的Teamplayer模型加載我的數據庫中的人的列表,我怎麼能做到這一點 – user3240928

+0

我想加載到一個select_tag – user3240928

回答

2

你的一個首要問題是在控制器中:你是不正確地請求params[:id]時,你應該問的params[:ids]因爲你從jQuery的土地通過{'ids': ids}通過。您還需要將成功處理函數傳遞給$.post函數,以便您可以處理響應併發生某種情況。

一旦你實例化@ids正常,你可以直接將它傳遞給模型的find方法:

<% Teamplayer.find(@ids) do |tp| %> 

這會發現所有這些ID的Teamplayers。在這裏,您可以利用Rail's form helpers來生成該HTML選擇列表。取而代之的是:

<select id = "test3" style= float:right size= 10> 
<% Teamplayer.find_each(:conditions => "teamid = @ids") do |tp| %> 
    <option> <%#[email protected] %></option> 
    <option>Players on team 1</option> 
<% end %> 
</select> 

這樣做:

<%= select_tag "test3", options_from_collection_for_select(Teamplayer.find(@ids), "id", "name") %> 

注意,最後一個參數options_from_collection_for_select是 「名」,僅作爲示例。您應該將其更改爲Teamplayer表中您希望用作選項標籤中文本的字段名稱,我猜測這將是teamid

最後,我不確定你想要做的最後一次ajax調用。希望上述將解決您的原始問題。

+0

當我使用的同一頁:'' <%= select_tag「test3」,options_from_collection_for_select(Teamplayer.find(@ids),「id」,「name」)%>錯誤頁面顯示:無法找到沒有ID的Teamplayer,它沒有正確傳遞? – user3240928

+0

您是否修復了您的控制器並將參數[:ids]分配給@ids?確保@ids已設置並具有整數數組。 – DiegoSalazar

+0

@ids = params [:ids]就像這樣來自jquery的 – user3240928

0

它看起來像你剛纔有一個變量命名問題 - 重命名 'ID' 爲 'IDS' 在需要的地方:

的jQuery:

var ids = 1; 
$.post("http://localhost:3000/teamplayers", {'ids': ids}); 

Teamplayers控制器:

@ids = params[:ids] 
+0

所以像這樣:'var ids = 1; $ .post(「localhost:3000/teamplayers」,{'ids':ids});' – user3240928

+0

oops - 我的答案仍然有錯誤!現在修復 –

+0

好吧我做了這個,並試圖在這個聲明中使用該變量:'<%= select_tag「test3」,options_from_collection_for_select(Teamplayer.find(@ids),「id」,「playerid」)%>'這給了一個錯誤:無法找到沒有ID的Teamplayer – user3240928