Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用ExtJS从RubyonRails读取JSON_Javascript_Ruby On Rails_Ruby_Json_Extjs - Fatal编程技术网

Javascript 如何使用ExtJS从RubyonRails读取JSON

Javascript 如何使用ExtJS从RubyonRails读取JSON,javascript,ruby-on-rails,ruby,json,extjs,Javascript,Ruby On Rails,Ruby,Json,Extjs,我有一些现有的项目是建立在一个不推荐使用的PHP框架上的,我希望用最少的努力将它们转移到RubyonRails上。我现在的主要问题是JSON返回的格式。我的前端代码(所有ExtJS)需要JSON格式: { "result": [ [id: 1, name: "mike"], [id: 2, name: "john"], [id: 3, name: "gary"] ] } 但是Ruby on Rails的默认返回如下: {

我有一些现有的项目是建立在一个不推荐使用的PHP框架上的,我希望用最少的努力将它们转移到RubyonRails上。我现在的主要问题是JSON返回的格式。我的前端代码(所有ExtJS)需要JSON格式:

{
    "result": [
        [id: 1, name: "mike"],
        [id: 2, name: "john"],
        [id: 3, name: "gary"]
    ]
}
但是Ruby on Rails的默认返回如下:

{
    "result": [
        {"record" : {id: 1, name: "mike"}},
        {"record" : {id: 2, name: "john"}},
        {"record" : {id: 3, name: "gary"}}
    ]
}
我的控制器基本上什么也不做,只是:

@records = Record.find(:all)
respond_to do |format|
  format.json { render :text => @records.to_json}
end
如您所见,它为每个记录添加了一个额外的键,而我的前端ExtJS代码无法按原样进行解析。有没有办法阻止这种事情发生

谢谢你的帮助


Mike Trpcic

这个问题现在可以结束了,但我觉得我应该为将来遇到同样情况的任何人发布解决方案。您可以使用以下插件:。即使您不希望使用scaffold功能,它也会添加一个额外的“to_ext_json”方法,该方法输出默认情况下可由ExtJS读取的json

感谢所有调查此事并试图帮助我的人。

您也可以尝试:

@records = Record.find(:all)
respond_to do |format|
  format.json { render :json => @records.map {|r| r.attributes } }
end

以下是一个适合我的模式:

format.json { render :json =>  {
          :rows => @data_array,
          :results => @data_array.length
        }, :callback => params[:callback]}
基本上:

ActiveRecord::Base.include_root_in_json = false

如本文所述:

[id:1,名称:“mike”],这不是有效的JSON。
YourClass.include_root_in_json = false