Ruby on rails Rails to_json-现有列的精确顺序

Ruby on rails Rails to_json-现有列的精确顺序,ruby-on-rails,json,jqgrid,customization,Ruby On Rails,Json,Jqgrid,Customization,我的任务是为jqGrid生成JSON数据。它需要一种特殊的格式: { total: 50, page:"1", records: "1500", rows: [ { 20, "{2ae39c44-ca9d-4565-9e05-bbd875c1579c}", "Description 1"}, { 23, "{e1aaf69d-1040-4afa-8995-fd15c3a591b3}", "Description 2"},

我的任务是为jqGrid生成JSON数据。它需要一种特殊的格式:

{
    total: 50,
    page:"1",
    records: "1500",
    rows: [
        { 20, "{2ae39c44-ca9d-4565-9e05-bbd875c1579c}", "Description 1"},
        { 23, "{e1aaf69d-1040-4afa-8995-fd15c3a591b3}", "Description 2"},
        { 25, "{e3df29c7-ef34-46ba-bf66-7838aca7c137}", "Description 3"},
        { 29, "{768ec164-28e5-4614-a259-63257b79e8e0}", "Description 4"}
    ]
}
所以“行”的基本规则是:不生成根对象名,列出没有名称的字段,按与相应列绑定的确切顺序列出字段

我可以强制使用json方法根据需要修改输出吗

当前to_json生成:

myobjs : [
myobj : { id: 20, uuid: "{2ae39c44-ca9d-4565-9e05-bbd875c1579c}", name: "Description 1"},
myobj : { id: 20, uuid: "{e1aaf69d-1040-4afa-8995-fd15c3a591b3}", name: "Description 2"},
myobj : { id: 20, uuid: "{e3df29c7-ef34-46ba-bf66-7838aca7c137}", name: "Description 3"},
myobj : { id: 20, uuid: "{768ec164-28e5-4614-a259-63257b79e8e0}", name: "Description 4"}
]

你不能用一个模型级的
to_json
调用,你需要像@Paul说的那样构建一个中间数据表示。比如:

class MyObj
  def to_json
    [id, uuid, name]
  end
end
然后在控制器中:

class MyController < ApplicationController
  def grid_data
    objs = MyObj.all
    json_data = {
      :total => objs.count,
      :page => 1,
      :records => 1500,
      :rows => objs.collect {|o| o.to_json}
    }
    ... send json as usual ...
  end
end
class MyControllerobjs.count,
:第=>1页,
:记录=>1500,
:rows=>objs.collect{| o | o.to_json}
}
... 像往常一样发送json。。。
终止
终止

请注意,我将您的模型设置为生成一个数组,而不是您指定的散列,因为我认为您复制的是错误的-上面的JSON示例无效。{20,'foo','bar'}不是有效的JSON,因为“{…}”表示哈希,必须对其进行键控,并且没有顺序

您可以自己重写它并生成正确的输出,不是吗?是的,我可以,但是有没有不重写的标准方法?重写
到_json
是一种反模式。凌驾是一种更稳健的方法。呵呵,被指控有罪。但更清楚的是,你在为下一个有明显超控的家伙做什么。如果你按照@x1a4的建议做了正确的事情,看在上帝的份上,说说为什么。