Как добавить дополнительные данные в записи ActiveRecord, сериализованные в JSON в Rails? - PullRequest
3 голосов
/ 12 мая 2009

Я раскрываю некоторые ресурсы через простой API, который возвращает JSON. Я хотел бы ввести путь к каждому из ресурсов, чтобы потребителю не нужно было их создавать. Пример желаемого вывода для чего-то вроде User.all.to_json:

users: [
  {user: {
    id: 1,
    name: 'Zaphod',
    url: 'http://domain.com/users/1.json'
  }},
  {user: {
    id: 2,
    name: 'Baron Munchausen',
    url: 'http://domain.com/users/2.json'
  }}
];

Чтобы сгенерировать URL, я бы хотел продолжить использовать помощников и не загрязнять модели такой информацией. Есть ли способ сделать это? Или мне лучше положить это в модель?

Ответы [ 2 ]

4 голосов
/ 13 мая 2009

Если у вас есть метод модели, который вы хотите включить в сериализацию json, вы можете просто использовать встроенный вызов to_json с параметром :methods:

class Range
   def url
     # generate url
     ...
    end
end

Range.find(:first).to_json(:methods => :url)
0 голосов
/ 12 мая 2009

Вы проверяли это: http://json.rubyforge.org/?

class Range
  def to_json(*a)
    {
      'json_class'   => self.class.name,
      'data'         => [ first, last, exclude_end? ]
    }.to_json(*a)
  end

  def self.json_create(o)
    new(*o['data'])
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...