0

単純な構造体に基づいてカスタム クラスを作成しましたが、それを JSON で取得する必要があります。

    class ItemTag <
      Struct.new(:id, :item_id, :type, :subtype, :top, :left, :height, :width, :name, :alternate, :photo_url, :price, :quantity, :comment, :memo)
      def to_map
        map = Hash.new
        self.members.each { |m| map[m] = self[m] }
        map
      end

      def to_json(*a)
        to_map.to_json(*a)
      end
    end

私のコントローラーでは、次のようにこのデータを収集しています。

@tags = design.item_links.all.map{ |pi| ItemTag.new(pi.id,pi.item_id,pi.item.type,pi.item.subtype,pi.top,pi.left,pi.height,pi.width,pi.item.name,pi.item.alternate_name,pi.item.logo_photo(:thumb),pi.price,pi.quantity,pi.public_note,pi.private_note)}

最後に、私の見解では、このデータを JSON 文字列として JavaScript 関数に渡す必要があるので、次のようにします。

<%= raw(@tags.to_json) %>

私が得る出力は次のようになります。

[[\"1b245b45\",\"444dc0e6\",\"plant\",\"cactus\",94,661,110,174,\"Blue mistflower\",\"conoclinium coelestinum\",\" \",56.0,4,\"test\",\"test\"],[\"21e8db0c\",\"3097c392\",\"plant\",\"bamboo\",128,108,161,100,\"Green and gold\",\"chrysogonum virginianum\",\" \",76.0,5,\"this is very green\",\"dont tell them it has gold\"]]

コントローラーの map アクション内に to_json を配置すると、レコードごとに有効な json が生成されますが、すべてのオブジェクトの配列が JSON として得られるわけではありません。

何か案は?

4

1 に答える 1

0

私はこれがうまくいくと思います:

def as_json(*a)
  to_map
end

Ruby の as_json メソッドは、JavaScript の to_json 関数に似ています。シリアル化されたデータではなく、シリアル化する準備ができているデータを返します。

于 2012-07-19T18:14:56.547 に答える