rails to_json include_root_in_json的意外行为

时间:2010-09-23 03:15:54

标签: ruby-on-rails json serialization

我有这样的模型

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] )

=&GT; {“parent”:{“kids”:[{“kid”:{“name”=&gt; “kid0” ....等等。正是我想要的。每个对象看起来像一个带有单个键的哈希 - 这是模型名称 - 并且值是属性哈希。大。

但是当我尝试序列化整个树时遇到麻烦,就像这样:

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

=&GT; {“parent”:{“kids”:[{“name”=&gt; “kid0” ...... 缺少“kids”数组中的模型名称。同样的事情发生在与孙子孙女的下一个级别。我将在其他地方解析它,这将有助于确定对象名称(而不是依赖于使用关系名称的约定)。文档宣传了这一点:

ActiveRecord::Base.include_root_in_json = true

我发现它没有效果。我的猜测是不同的行为与:method和:include选项之间的区别有关,但是我不能纠缠:method语法来获得我需要的嵌套,而且我不确定它是否会起作用如果它编译。<​​/ p>

有什么想法吗?谢谢,丹

1 个答案:

答案 0 :(得分:1)

作为一种解决方法,我在我的模型中重写to_json:

def to_json(args)
    super( :methods => [:kids] )
end