栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在Rails中覆盖to_json?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在Rails中覆盖to_json?

你得到

ArgumentError: wrong number of arguments (1 for0)
,因为
to_json
需要重写一个参数的
options
哈希值。

def to_json(options)  ...end

的更详细的解释

to_json
as_json
和渲染:

在ActiveSupport 2.3.3中,

as_json
添加了解决您遇到的问题的方法。json 的 创建 应与json的 呈现 分开。

现在,随时

to_json
可以在对象
as_json
上调用,调用来创建数据结构,然后使用将该哈希编码为JSON字符串
ActiveSupport::json.enpre
。所有类型均会发生这种情况:对象,数字,日期,字符串等(请参阅ActiveSupport代码)。

ActiveRecord对象的行为方式相同。有一个默认

as_json
实现,该实现创建一个包含所有模型属性的哈希。
您应该
as_json
在Model中重写以创建所需的JSON结构
as_json
,就像旧的一样
to_json
,采用选项哈希,您可以在其中指定要声明式包含的属性和方法。

def as_json(options)  # this example ignores the user's options  super(:only => [:email, :handle])end

在您的控制器中,

render :json => o
可以接受字符串或对象。
如果是字符串,则将其作为响应主体传递,如果是对象,则将其作为响应主体
to_json
进行调用,并
as_json
如上所述触发。

因此,只要您的模型正确地用

as_json
覆盖(或不覆盖)表示,那么用于显示一个模型的控制器代码应如下所示:

format.json { render :json => @user }

这个故事的寓意是: 避免

to_json
直接打电话,允许
render
为您这样做。如果您需要调整JSON输出,请致电
as_json

format.json { render :json =>     @user.as_json(:only => [:username], :methods => [:avatar]) }


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/371133.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号