Rails将ActiveRecord :: Relation作为json返回给ajax调用
嗨,我有一个ajax电话:
$.ajax({ url: ' :users , :action => :search_user) %>', data: {search: $("#suchfeld").val()} }) .done(function (data) { alert(msg); })
现在我希望来自控制器的返回值,活动记录对象将作为json对象返回。
我试过这个:
@users_search = User.where("lastname LIKE ?", "#{params[:search]}%").to_json
但是我没有回到我想要的东西。
@users_search是一个对象,所有用户都对应上述(工作)查询。
我得到了som HTML代码而不是Active记录对象作为json对象
我想要一个json对象,因为我想迭代它
也试过这个:
.done(function () { var array = ; alert(array); })
数组始终为null
编辑:
将代码更改为:
@userss = User.where("lastname LIKE ?", "#{params[:search]}%") for user in @userss do @users_to_add < user.id, :lastname => user.lastname} end @users_search < @users_to_add}.to_json
数组在控制台中看起来像:
["{\"results\":[{\"id\":1,\"lastname\":\"Hohlwegler\"},{\"id\":2,\"lastname\":\"Hohlwegler\"},{\"id\":5,\"lastname\":\"Hohlwegler\"},{\"id\":6,\"lastname\":\"Hohlwegler\"},{\"id\":11,\"lastname\":\"Hohlwegler\"}]}"]
更新:
不得不改变它:
respond_to do |format| format.json { render :json => { :results => @userss.map{ |u| { :id => u.id, :lastname => u.lastname } } } } end
返回:[Object object]
.done(function (arr) { alert(arr); })
如果我发出警报(arr [0] .data); 我得到了无法读取未定义的数据
我认为你混合了两个不同的概念。
Rails可以处理不同类型/格式的请求,例如html(默认),json,js,xml等。
它在您的代码中不可见控制器如何处理请求,所以我将其作为html处理。
另一方面,jquery不了解您在服务器中使用的技术,因此尝试打印控制器变量不起作用。
执行以下更改以尝试解决此问题:
在用户#search_user中
users = User.where("lastname LIKE ?", "#{params[:search]}%") respond_to do |format| format.json { render json: { results: users.map{ |u| { id: u.id, lastname: u.name } } } } end
在你看来:
$.ajax({ url: '<%= url_for( :controller => :users , :action => :search_user) %>', data: {search: $("#suchfeld").val()}, dataType: 'json' }).done(function (data) { alert(data); })
更新您可以使用JSON.stringify
查看“data”对象:
alert(JSON.stringify(data));
控制器也返回一个具有以下格式的对象:
{ results: [{id: 1, lastname: 'foo'}, {id: 2, lastname: 'bar'}] }
因此,如果你想获得第一个姓氏,你应该使用类似: data.results[0].lastname