指定传递给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