2014-01-28 28 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