0

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"}
    ]
}

したがって、「行」の基本的なルールは次のとおりです。ルート オブジェクト名を生成しない、フィールドを名前なしでリストする、フィールドを正確な順序でリストして対応する列にバインドする。

必要に応じて to_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"}
]
4

1 に答える 1

0

モデルレベルの呼び出しではそれを行うことはできません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

間違ってコピーしたと思うので、指定したハッシュではなく配列を生成するようにモデルを設定したことに注意してください。上記のJSONの例は無効です。{20、'foo'、'bar'}は有効なJSONではありません。"{...}"はハッシュを表すため、キーを設定する必要があり、順序付けされていません。

于 2012-05-19T02:09:24.600 に答える