Переопределите as_json или to_json образцовое имя класса

Я хотел бы изменить имя класса при вызове to_json на модели AR.

т.е.

Book.first.to_json
 #=> "{\"book\":{\"created_at\":\"2010-03-23 

Book.first.to_json(:root => 'libro')
 #=> "{\"libro\":{\"created_at\":\"2010-03-23 

Существует ли опция сделать это?

5
задан Jirapong 10 February 2011 в 10:27
поделиться

2 ответа

Вы можете переопределить метод to_json по умолчанию в своей модели, создайте хэш нужных атрибутов, а затем вызовите для него метод to_json хеша.

class Book < ActiveRecord::Base

  def to_json
    { :libro => { :created_at => created_at } }.to_json
  end

end

#=> "{\"libro\":{\"created_at\":\"2010-03-26T13:45:28Z\"}}"

Или, если вам нужны все атрибуты записей ...

def to_json
  { :libro => self.attributes }.to_json
end
0
ответ дан 18 December 2019 в 05:31
поделиться

Для совместимости с Rails 3 переопределите as_json вместо to_json . Он был введен в 2.3.3:

def as_json(options={})
  { :libro => { :created_at => created_at } }
end

Убедитесь, что ActiveRecord :: Base.include_root_in_json = false . Когда вы вызываете to_json , за кулисами as_json используется для построения структуры данных, а ActiveSupport :: json.encode используется для кодирования данных в Строка JSON.

28
ответ дан 18 December 2019 в 05:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: