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

Vee*_*Vee 10 attributes json ruby-on-rails object

我在滑轨的对象具有属性A,B,C,d,和E.当通过这个对象返回给客户端通过一个JSON对象,我怎样才能告诉导轨控制器只包括属性A和d在JSON对象?

在我的Users控制器中,我的代码如下:

    @user = User.find(params[:id])

    respond_to do |format|
        format.html
        format.json { render :json => @user}
    end
Run Code Online (Sandbox Code Playgroud)

但是,此代码有效,返回的JSON对象包含@user对象的所有属性.在将任何内容发送回客户端之前,如何限制JSON对象中包含的属性?

更新:lucapette提供了一些关于幕后发生的事情的好背景.由于有时我可能想要返回所有属性,我最终使用以下代码:

    format.json { render :json => @user.to_json(:only => ["id"])}
Run Code Online (Sandbox Code Playgroud)

luc*_*tte 15

render :json => @user
Run Code Online (Sandbox Code Playgroud)

将调用to_json@user对象.并且该to_json方法将使用该as_json方法来完成其工作.因此,您可以轻松覆盖as_json仅将您想要的内容传递给客户端.如下所示:

def as_json options={}
  {
    attr1: attr1,
    attr2: attr2
  }
end
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,lucapette.阅读完回复后,我查看了to_json和as_json方法.然后,我按如下方式修改了我的代码:format.json {render:json => @ user.to_json(:only => ["id"])}.似乎必须有一些多余的代码,但我找不到另一种方法来使它工作. (3认同)