我正在使用to_json,包括协会。 但是,生成的json对象包含关联对象的所有方法,即使我要求它排除方法。
我尝试过这些方法:
render :json => @entries.to_json(:include => {:labels => {:only => [:label_id, :name], :methods => []}})
render :json => @entries.to_json(:include => {:labels => {:only => [:label_id, :name], :methods => :none}})
render :json => @entries.to_json(:methods => [], :include => {:labels => {:only => [:label_id, :name], :methods => []}})
我得到以下对象:
"entry": {
"id" : "1",
"other property of entry" : "value",
...
"labels" : {
"0" : {
"name" : "animals",
"label_id" : "2",
},
"1" : {
"name" : "furry animals",
"label_id" : "5",
},
"_each" : "... method properties",
"_reverse" "... method properties",
etc...
}
}
因此,正确创建了“entry”的每个json对象,包含了相关的标签,但我无法忽略“标签”中的方法。
有关如何正确执行此操作的任何想法?
感谢。
修改
@nirvdrum,谢谢你的建议。 不幸的是,这并没有解决它。
我已将此添加到模型中
def as_json(options={})
super(:include => {:labels => {:only => [:label_id, :name]} } )
end
控制器执行此操作:
render :json => @entries
结果是一样的。 任何其他建议将不胜感激。
答案 0 :(得分:0)
我不知道如何使用to_json,但你应该能够使用as_json轻松完成,现在这是自定义JSON输出的首选方法。
可以在Jonathan Julian's weblog上找到有关as_json和to_json如何互动的更全面的处理方法。
答案 1 :(得分:0)
你的标签对象的to_json或as_json是什么样的?
过去,我已经覆盖了一个as_json方法,并忽略了进来的选项。
如果你这样做:
def as_json(opts={})
super(:include=>[:name, :address])
end
那么params将完全被忽略。要解决这个问题,你可以:
def as_json(opts={})
opts.merge!(:include=>[:name, :address])
super(opts)
end
在黑暗中拍摄。如果那就是在附近,请告诉我。