2012-01-29 81 views
10

我在Rails中拥有属性A,B,C,D和E的对象。当通过JSON对象将此对象传递回客户端时,如何我可以告诉rails控制器只在JSON对象中包含属性A和D吗?指定传递给JSON对象的Rails对象的属性

在我的用户控制,我的代码如下:

@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"])} 

回答

15
render :json => @user 

将调用to_json的@user对象。而to_json方法将使用as_json方法来完成其工作。因此,您可以轻松覆盖as_json以仅将您想要的内容传递给客户端。就像下面这个:

def as_json options={} 
    { 
    attr1: attr1, 
    attr2: attr2 
    } 
end 
+3

谢谢,lucapette。在阅读你的回复之后,我查看了to_json和as_json方法。然后,我修改了我的代码,如下所示:format.json {render:json => @ user.to_json(:only => [“id”])}。似乎在那里一定有一些多余的代码,但我找不到另一种方式使它工作。 – Vee 2012-01-29 19:20:50

+0

是的,你也可以使用这些选项。它也可以很好地工作。这取决于你必须面对的情况。 – lucapette 2012-01-29 19:26:50