ruby-on-rails – Rails as_json问题 – 如何有效地包括嵌套对象
发布时间:2020-12-16 21:41:44 所属栏目:百科 来源:网络整理
导读:我正在遇到一个问题,我正在使用as_json方法,以及如何有效地返回 JSON中的对象,它的belongs_to对象也是JSON,而belongs_to对象具有自己的belongs_to对象.代码可能会更好地解释. 不工作的方式 警戒类 class Alert ActiveRecord::Base belongs_to :message # for
我正在遇到一个问题,我正在使用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对象和调用 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?这是旧版本的Rails中的一个已知错误,据说是用
this pull request修复的.您的语法对我来说是正确的,所以也许这是你的问题?
除此之外,您还可能要从Jose Valim(Rails核心成员)核对新的active_model_serializers.它至少可以使您以更优雅的方式解决您的问题. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- ruby-on-rails – 从下载的tar或zip中安装gem
- 如何从fgets中检测空字符串
- 让postgresql返回服务端的二进制文件
- 操作xml文件:DOM、SAX、JDOM、JAXB、Dom4J
- objective-c – 在iOS中显示隐藏的类似navBar的菜单?如Get
- ruby-on-rails – 所有模型的ActiveRecord全局回调
- c# – 在添加项目时冻结一个listboxitem
- reactjs – 从React应用程序加载Sass并将CSS文本注入父文档
- 【Oracle学习】之 表的连接查询
- JSON.stringify()、eval(),JSON.parse()各自的区别于作用