我在Rails中有一个具有属性A,B,C,D和E的对象。当通过JSON对象将此对象传递回客户端时,如何告诉rails控制器仅包含属性A和J在JSON对象中?
在我的用户控制器中,我的代码如下:
@user = User.find(params[:id])
respond_to do |format|
format.html
format.json { render :json => @user}
end
但是,此代码有效,返回的JSON对象包含@user对象的所有属性。在将任何内容发送回客户端之前,如何限制JSON对象中包含的属性?
更新:lucapette提供了一些关于幕后发生的事情的好背景。由于有时我可能希望返回所有属性,因此我最终使用以下代码:
format.json { render :json => @user.to_json(:only => ["id"])}
答案 0 :(得分:15)
render :json => @user
将在@user对象上调用to_json
。 to_json
方法将使用as_json
方法完成其工作。因此,您可以轻松覆盖as_json
,仅将您想要的内容传递给客户端。如下所示:
def as_json options={}
{
attr1: attr1,
attr2: attr2
}
end
答案 1 :(得分:0)
在这里很好的方式How to select only specific attributes from a model? 使用select来获取某些属性。
当然,只有在您不需要代码中的其他属性时才能使用。 作为解决这个问题的一般方法,rabl值得一看https://github.com/nesquena/rabl