Как я могу создать простой json с этим классом Ruby? - PullRequest
0 голосов
/ 28 июля 2010

Вот простой класс ActiveResource. У него есть некоторые переменные экземпляра и, возможно, даже некоторые методы, но он не поддерживается никакими данными.

ruby-1.8.7-p299 > class Box < ActiveResource::Base;
                    attr_accessor :a, :b, :c, :d;
                  end
 => nil

Давайте заполним это:

ruby-1.8.7-p299 > bx = Box.new; bx.a = 100; bx.b = 200;
                                bx.c = 300; bx.d = 400;
                                bx
 => #<Box:0xb5841c54 @attributes={}, @b=200, @a=100,
       @prefix_options={}, @c=300, @d=400> 

Пока все хорошо. Как насчет того, чтобы выбрать некоторые из этих переменных экземпляра для его модели JSON? Скажем, что мы заботимся только о b и c, но не a, d или о чем-либо еще.

ruby-1.8.7-p299 > bx.to_json({:only => ['b', 'c']})
 => "{}"

Однако это не работает, поскольку у нас нет атрибутов , называемых 'b' или 'c', только значения. Как мы можем получить что-то подобное?

{ "box": { "b": 200, "c": 300 } }

Еще лучше, мы можем получить это без наследования от ActiveResource?

Ответы [ 2 ]

1 голос
/ 28 июля 2010

В объекте AR вы просто используете параметр 'методов' для to_json, как на этой странице: http://www.gregbenedict.com/2007/11/28/outputting-custom-model-attributes-with-to_json/.

В объекте, отличном от AR, просто определите собственный метод to_json, в котором вы собираете хеш переменных, которые вы хотите json-ize, затем to_json и возвращаете его. Например, вот (непроверенный) пример:

def to_json(options = {})
  {"box" => {"b" => b, "c" => c}}.to_json(options)
end
0 голосов
/ 28 июля 2010

Попробуйте использовать YAJL-ruby для кодирования ваших хэшей в формат json.

require 'yajl'
hash = {:only => ['b', 'c']}
Yajl::Encoder.encode(hash)
=> "{\"only\":[\"b\",\"c\"]}"

http://rdoc.info/projects/brianmario/yajl-ruby

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...