2012-01-29 14 views
10

属性A、B、C、D、Eを持つRailsにオブジェクトがあります。このオブジェクトをJSONオブジェクトを通してクライアント側に渡すと、 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 

@userオブジェクトにto_jsonを呼び出します。 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

+0

うん、あなたもオプションを使用することができます。あまりにもうまくいく。それはあなたが直面しなければならない状況に本当に依存します。 – lucapette

関連する問題