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