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

我在Rails中有一个具有属性A,B,C,D和E的对象。当通过JSON对象将此对象传递回客户端时,如何告诉rails控制器仅包含属性A和D. JSON对象?

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

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

 render :json => @user 

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

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

这里的好方法如何从模型中仅选择特定属性? 使用select来获取某些属性。

当然,只有在代码中不需要其他属性时才能使用。 作为解决这个问题的一般方法,rabl值得一看https://github.com/nesquena/rabl