指定传递给JSON对象的Rails对象的属性

时间:2012-01-29 18:56:59

标签: ruby-on-rails json object attributes

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

2 个答案:

答案 0 :(得分:15)

render :json => @user

将在@user对象上调用to_jsonto_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