Я хотел бы изменить имя класса при вызове 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
Существует ли опция сделать это?
Вы можете переопределить метод 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
Для совместимости с 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.