質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

822閲覧

Rails の ActiveModel::Serializer で 特定のkeyは表示しない方法を教えてください。

tomo1986

総合スコア10

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2018/08/16 15:31

編集2018/08/16 15:33

UserSerializerの中の特定のattributesのkeyだけ取得してレスポンスできるようにしたいのですが、その方法がわかりません。
現状はUserSerializerのattributes、attributeに設定しているkeyがすべて表示されてしまいます。
以下設定ファイルの内容です。

UserSerializer

1class UserSerializer < ActiveModel::Serializer 2 attributes :id, :first_name, :last_name, :last_name_kana, :first_name_kana, :token, :email 3 attribute :user_status 4 5 def user_status 6 scope[:user_status] if scope && scope[:user_status] 7 end 8 9end 10

users_controller.rb

1 def index 2 @users = User.all 3 render status: 200, json: @users 4 end 5

例えば、Aという場所のapiでは、userのid、last_name,first_nameだけレスポンスしてほしい。
しかし、上記controllerの設定だと、すべてのkeyが表示されてしまいます。

responce

1[ 2 { 3 "id":1, 4 "first_name":"aaa", 5 "last_name":"bbb", 6 "first_name_kana":"あああ", 7 "last_name_kana":"いいい", 8 "token": "1204y9r5jjfjlkasd", 9 "email":"xxx@gmail.com", 10 "user_status":null 11 } 12] 13

私は以下のように設定したいのですが、どうしたら、できますでしょうか?

[ { "id":1, "first_name":"aaa", "last_name":"bbb", } ]

ご教示いただきたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

下記のようにしたらできないでしょうか?

diff

1class UserSerializer < ActiveModel::Serializer 2- attributes :id, :first_name, :last_name, :last_name_kana, :first_name_kana, :token, :email 3+ attributes :id, :first_name, :last_name 4 5- attribute :user_status 6 7 def user_status 8 scope[:user_status] if scope && scope[:user_status] 9 end 10 11end

投稿2018/08/17 01:23

satoshih

総合スコア797

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tomo1986

2018/08/17 03:38

ご回答ありがとうございます。 例えば api1ではレスポンスid, first_name, last_name, last_name_kana, first_name_kana, token, email, user_statusを返したい api2ではレスポンスid, first_name, last_nameを返したい というふうにapiによって返すattributesのkeyを選びたいのです。 そもそもそういう使い方はしないのですかね?
satoshih

2018/08/17 04:28

そうですね、あまりしないかと思います。 同一のURLに対してのリクエストでレスポンスの構成が変わるとよくないと思います。 また別のURL(用途の違うURL)に対してのリクエストのレスポンスであればSerializerを分けるのが自然かと思います。 SerializerはあくまでAPIにとってのViewですので、複雑なことはさせない方があとあと混乱せずに済むかと思います
tomo1986

2018/08/17 08:40

ご回答ありがとうございます。 なるほどですね。どおりでいろいろ調べても出てきなかったわけですね。 どうやらattributesをオーバーライドするとできるみたいですが、複雑になりそうな気がします。 (用途の違うURL)に対してのリクエストのレスポンスであればSerializerを分けるのが自然かと思います。 =>これについて方法を調べてみます。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問