rails to_json неожиданное поведение для include_root_in_json - PullRequest
2 голосов
/ 23 сентября 2010

У меня есть такая модель

class Parent < ActiveRecord::Base
  :has_many :kids
end

class Kid < ActiveRecord::Base
  :has_many :grandkids
  :belongs_to :parent
end

Я могу сгенерировать JSON следующим образом:

the_parent.to_json( :methods => [:kids] )

=> {"parent": {"kids": [{"kid": {"name" => "kid0" .... и так далее. Как раз то, что я хочу. Каждый объект выглядит как хеш с одним ключом - именем модели - а значение является хешем атрибута. Отлично.

Но у меня возникают проблемы, когда я пытаюсь сериализовать все дерево, например так:

the_parent.to_json( :include => { :kids => { :include => :grandkids } } )

=> {"parent": {"kids": [{"name" => "kid0" ... в котором отсутствуют имена моделей в массиве "kids". То же самое происходит на следующем уровне с внуками. Я собираюсь проанализировать это где-то еще, и это поможет иметь определенность в отношении имени объекта (в отличие от использования соглашения с использованием имени отношения). Документы рекламируют это:

ActiveRecord::Base.include_root_in_json = true

На что я нашел, что это не имеет никакого эффекта. Я предполагаю, что другое поведение связано с различием между опциями: method и: include, но я не могу изменить синтаксис: method, чтобы получить нужную мне вложенность, и я не уверен, будет ли это работать если он компилируется.

Есть идеи? Спасибо, Дэн

1 Ответ

1 голос
/ 30 октября 2011

В качестве обходного пути я переопределяю to_json в моей модели следующим образом:

def to_json(args)
    super( :methods => [:kids] )
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...