Заменете as_json или to_json име на клас модел

Бих искал да променя името на класа, когато извиквам to_json на AR модел.

i.e.

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

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

Има ли вариант това да стане?


person Jack    schedule 31.03.2010    source източник
comment
Не знам за отмяната на to_json, но можете да зададете ActiveRecord::Base.include_root_in_json = false и той няма да изведе основния възел, след което можете да добавите какъвто и да е основен възел желаете.   -  person Corey    schedule 01.04.2010


Отговори (3)


За да сте съвместими с 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 низ.

person Jonathan Julian    schedule 04.04.2010

Поне от 3.0.5 вече имате възможността да подадете опция :root към извикването to_json. Ето източника на метода as_json в активен запис сега.

def as_json(options = nil)
    hash = serializable_hash(options)

    if include_root_in_json
      custom_root = options && options[:root]
      hash = { custom_root || self.class.model_name.element => hash }
    end

    hash
end

Така че, за да използвате това само @obj.to_json(:root => 'custom_obj')

person Kris Fox    schedule 30.07.2011

Можете да замените метода 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
person rbxbx    schedule 02.04.2010