我尝试使用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的方式有什么问题?
发布于 2014-01-29 04:03:02
您首先遇到的问题之一是在控制器中:您错误地请求了params[:id]
,而您应该请求params[:ids]
,因为您是通过{'ids': ids}
从jQuery传入的。您还需要将一个成功处理程序函数传递给$.post
函数,以便您可以处理响应并立即执行某些操作。
一旦正确实例化了@ids
,就可以将其直接传递给模型的find方法:
<% Teamplayer.find(@ids) do |tp| %>
这将会找到所有拥有这些ids的团队成员。在这里,您可以利用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调用做什么。希望上面提到的能解决你原来的问题。
发布于 2014-01-29 04:07:45
看起来你只是遇到了一个变量命名问题--将'id‘重命名为'ids’:
jQuery:
var ids = 1;
$.post("http://localhost:3000/teamplayers", {'ids': ids});
团队玩家控制器:
@ids = params[:ids]
https://stackoverflow.com/questions/21415404
复制相似问题