意外的行为,我有这样的轨to_json为include_root_in_json
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])
=>{ “父”:{ “孩子”: {“kid”:{“name”=>“kid0” ....等等。正是我想要的。每个对象看起来都像一个带有单个键的散列 - 这是模型名称 - 值是一个属性散列。大。
但我遇到麻烦时,我尝试序列整棵树,就像这样:
the_parent.to_json(:include => { :kids => { :include => :grandkids } })
=>{ “父”:{ “孩子”:[{ “名”=>“kid0 “ ... 缺少”kids“数组中的模型名称。同样的事情发生在孙辈的下一级。我将解析这个地方,这将有助于确定对象名称(而不是依靠使用关系名称的约定)。该文件advertise here:
ActiveRecord::Base.include_root_in_json = true
我发现它没有任何效果。我的猜测是,不同的行为与方法和:include选项之间的差异有关,但我无法使用:方法语法来获得我需要的嵌套,而且我不确定这样做是否可以工作如果它编译。
任何想法?谢谢你,丹
我应该也提到过,我正在做一个渲染的背景下to_json电话:格式。 json => the_parent.to_json ... – danh 2010-09-23 04:20:46
我确定有更好的答案,但作为解决方法,我在我的模型中重写to_json,如下所示:def to_json(args)super(:methods => [:kids])end – danh 2010-09-23 04:22:32