如何使用Ajax发布到Rails?

时间:2014-01-28 19:50:13

标签: javascript jquery ruby-on-rails ruby ajax

我正在尝试使用POST方法通过jQuery传递变量,将其存储到控制器,然后在Rails HTML中使用相同的变量来查询表。

似乎没有将变量传递给控制器​​。

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> <%#=@teamplayer.teamid %></option>
    <option>Players on team 1</option>
<% end %>
</select>

此外,我尝试使用以下Ajax方法,但它将我的页面发布回我指定给它的标记。

的Ajax:

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

我使用POST或Ajax的方式出了什么问题?

2 个答案:

答案 0 :(得分:2)

您首先遇到的问题之一是控制器:当您通过params[:id]从jQuery域传递params[:ids]时,您错误地要求{'ids': ids}。您还需要将成功处理函数传递给$.post函数,以便您可以处理响应并使ajaxy发生。

正确实例化@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> <%#=@teamplayer.teamid %></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的最后一个参数仅为“name”。您应该将其更改为Teamplayer表中要用作选项标记中文本的字段的名称,我猜这将是teamid

最后,我不确定你要用最后一次ajax调用做什么。希望前面提到的将解决你原来的问题。

答案 1 :(得分:0)

看起来你只是有一个变量命名问题 - 在需要时将'id'重命名为'ids':

<强> jQuery的:

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

Teamplayers Controller:

@ids = params[:ids]