我正在遇到一个问题,我正在使用as_json方法,以及如何有效地返回
JSON中的对象,它的belongs_to对象也是JSON,而belongs_to对象具有自己的belongs_to对象.代码可能会更好地解释.
不工作的方式
警戒类
class Alert < ActiveRecord::Base belongs_to :message # for json rendering def as_json(options={}) super(:include => :message) end end
消息类
def as_json(options={}) super( methods: [:timestamp,:num_photos,:first_photo_url,:tag_names],include: { camera: { only: [:id,:name] },position: { only: [:id,:name,:address,:default_threat_level ]},images: { only: [:id,:photo_url,:is_hidden]} }) end
alert.as_json()
我从Alert获取所有属性,并从Message中获取所有属性,但没有其他属性来自Message,如Camera,Position等.
这是“它的工作,但可能不正确的设计方式”
警戒类
class Alert < ActiveRecord::Base belongs_to :message # for json rendering def as_json(options={}) super().merge(:message => message.as_json) end end
消息类
# for json rendering def as_json(options={}) super( methods: [:timestamp,:tag_names]) .merge(:camera => camera.as_json) .merge(:position => position.as_json) .merge(:images => images.as_json) end
在第二个设置中,我收到了所有的消息的嵌套属性,就像我想要的.
解决方法
你使用哪个版本的Rails?这是旧版本的Rails中的一个已知错误,据说是用
this pull request修复的.您的语法对我来说是正确的,所以也许这是你的问题?
除此之外,您还可能要从Jose Valim(Rails核心成员)核对新的active_model_serializers.它至少可以使您以更优雅的方式解决您的问题.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。