2016-04-12 4 views
0

アカウントごとにjson出力をカスタマイズできるようにする必要があります。 1人は標準のjsonレスポンスが好きかもしれません。別の人は、「account_name」などの「名前」フィールドが必要な場合を除いて、まったく同じフィードを使用することをお勧めします。RailsレスポンスのJSONフィールド名を変更する

ので、標準ユーザーと彼らは

@model.to_json(only: [:name, :title, :phone]) 

他のユーザーと幸せになることがあり、私は中as_json/to_jsonをを無効に解決策を見つけた

@model.to_json(only: [:name (AS ACCOUNT_NAME) , :title, :phone]) 

としてのJSONレスポンスを確認したい場合がありそれらはすべての人に影響を与える解決策であるようです。アクセス/アカウントごとに変更するにはどうすればよいですか?

+1

ようになりますこれを行うには、「Railsの道」はありません、なぜならそれはやりたいことは非常に奇妙なことです。どのようにカスタムフィールド名を保存するつもりですか?カスタムフィールドのマッピングを行い、フロントエンドが要求を処理したときに 'as_json'の出力に適用するのはあなた次第です。 – meagar

+0

フィールドエイリアスは、ある種のテンプレートに格納されるか、単に "set name = new_name"というようなものに置き換えられます。いくつかのユーザーのバックエンドは異なる入力が必要ですので、私は対応しなければなりません –

+0

@ 7urkm3nこれは、リモートで有効な構文ではありませんが、問題のサンプルは有効な構文ではありません。 – meagar

答えて

2

あなたのケースでは、Jbuilderを使用してロジックをviewレイヤーにプッシュしてコードをきれいにする方がよいと思います。 代わりにあなたが以下のような何かを行うことができますオーバーライドto_json方法のように:

# app/views/users/show.json.jbuilder 

json.model_name do 
    json.title @current_user.title 
    json.phone @current_user.phone 
    if current_user.type_account_name? # need to implement this logic somewhere in your app 
    json.account_name @current_user.name 
    else 
    json.name @current_user.name 
    end 
end 

更新

コントローラは、この

class UsersController < ApplicationController 
    def show 
    @user = User.find(params[:id]) 
    end 
end 
+0

ありがとう、私はこれで作業できます。このためコントローラはどのように見えますか? –

+0

Jbuilderはレールの一部なので、html版ではなくjson版だけを返すことを望むなら、実際には '@ model.to_json(only:[:name::title、:phone])' '@ model'が割り当てられていることを確認してください。レールが自動的にjbuilderテンプレートをレンダリングします –

+0

ありがとう、私はこれを試してみます –

関連する問題