我正在尝试使用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的方式出了什么问题?
答案 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]