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

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

新規登録して質問してみよう
ただいま回答率
85.49%
Ruby on Rails 5

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

Ruby on Rails

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

Q&A

解決済

1回答

1078閲覧

railsのUser.findした結果を更に加工したい

Kimsehwa

総合スコア312

Ruby on Rails 5

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

Ruby on Rails

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

0グッド

0クリップ

投稿2019/02/13 09:51

railsで保存されてるimg_urlをAPIとして返したいです。

現在はUser.findした結果(current_user)を以下のように返してます。

render json: current_user

ですが、shrineというgemを使ってイメージURLを管理していてDBにあるデータをそのままAPIとして返してもimage_urlを取得することはできませんでした。

pryで確認したcurrent_user

current_user => #<User id: 1, provider: "email", uid: "kaka@xx.com", allow_password_change: false, name: "pepe", nickname: "negabaro22", image: "", email: "kaka@xx.com", created_at: "2018-12-11 10:21:34", updated_at: "2019-02-13 09:23:57", image_data: "{\"original\":{\"id\":\"user/1/image/original-dd7d9db9f...">

current_user.imageをpryで確認した結果

current_user.image => {:original=> #<UserImageUploader::UploadedFile:0x00007f7d7a982228 @data= {"id"=>"user/1/image/original-dd7d9db9fc35aeafdfbc37adcf120895.jpg", "storage"=>"store", "metadata"=> {"filename"=>"2017mostbeautiful_twice_sana_07.jpg", "size"=>77596, "mime_type"=>"image/jpeg", "width"=>600, "height"=>480}}>, :thumbnail=> #<UserImageUploader::UploadedFile:0x00007f7d7a982098 @data= {"id"=>"user/1/image/thumbnail-a3f5dca7fa86db54e46d406900b5643c.jpg", "storage"=>"store", "metadata"=> {"filename"=>"image_processing20190213-678-1wnlsmx.jpg", "size"=>88482, "mime_type"=>"image/jpeg", "width"=>600, "height"=>480}}>}

pryでcurrent_user.image_url(:original)を見た結果

current_user.image_url(:original) => "https://xx.s3.ap-northeast-1.amazonaws.com/store/user/1/image/original-dd7d9db9fc35aeafdfbc37adcf120895.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIDRWRPXU5SK7OI6Q%2F20190213%2Fap-northeast-1%2Fs3%2Faws4_request&X-Amz-Date=20190213T092505Z&X-Amz-Expires=900&X-Amz-SignedHeaders=host&X-Amz-Signature=fc96856e07167e79839b13e414ec916f26a062405d1827923fe4696d200aad3e"

仕組みは理解できませんが、とりあえず、controller側でcurrent_user.image_url(:original)とcurrent_user.image_url(:thumbnail)の結果を取得してcurrent_userを加工して render jsonで返せば動きそうです。

ここでいくつか質問させてください。

1. current_userのobjectにprofile_imgというobjectを追加することは可能ですか?

調べてみるとstoreというのはhashにkeyを追加することが可能のようですが、current_userに対してstoreするとエラーになったので
current_userはhashではないようです。

current_user.store(profile_img: current_user.image_url(:original))

2. current_userの型を特定する方法はありますか?

current_user.classとか見てもcurrent_user自体の型を特定することはできませんでした。
current_userの型を特定すればその型に対して値を追加できる方法を調べられるのかと思いました。

なにかヒントになることありましたら教えていただくと大変助かります。
よろしくおねがいします

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

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

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

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

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

maisumakun

2019/02/13 10:07

「current_user.classとか見てもcurrent_user自体の型を特定することはできませんでした。」とありますが、どのような結果が出力されましたでしょうか。
Kimsehwa

2019/02/13 10:23

回答ありがとうございます。 ``` current_user.class => User(id: integer, provider: string, uid: string, encrypted_password: string, reset_password_token: string, reset_password_sent_at: datetime, allow_password_change: boolean, remember_created_at: datetime, sign_in_count: integer, current_sign_in_at: datetime, last_sign_in_at: datetime, current_sign_in_ip: string, last_sign_in_ip: string, name: string, nickname: string, image: string, email: string, tokens: text, created_at: datetime, updated_at: datetime, image_data: text) ``` と出ました。カラムの型はわかってますが、current_user自体の型はわかりませんでした
maisumakun

2019/02/13 11:18

先頭に「User」と明記してあります。
Kimsehwa

2019/02/13 11:54

Userはモデル名かと思いました。Userという型があるということですか。。
maisumakun

2019/02/13 11:57

はい、「class User」となっているように、Userはクラスです。
Kimsehwa

2019/02/13 12:57

Userという型= Userクラスという意味でしょうか。 Userはクラスなので中にあるもの(last_sign_in_ip)を追加することは不可能ですか?
maisumakun

2019/02/13 13:05

Userという型= Userクラスという意味でしょうか>そのとおりです。Rubyの型は基本的にクラスです(モジュールを型的に扱うこともなくはないですが)。 追加するまでもなく元からデータはあるのですが…
guest

回答1

0

ベストアンサー

current_user => #<User id: 1, provider: "email", uid: "kaka@xx.com", allow_password_change: false, name: "pepe", nickname: "negabaro22", image: "", email: "kaka@xx.com", created_at: "2018-12-11 10:21:34", updated_at: "2019-02-13 09:23:57", image_data: "{\"original\":{\"id\":\"user/1/image/original-dd7d9db9f...">

という結果から、まずはcurrent_userUserモデルということが分かります。
モデルにメソッドを追加してあげればご希望のことが実現できそうです。

class User < ApplicationRecord ... def profile_img image_url(:original) end ... end

投稿2019/02/13 16:05

kouheiszk

総合スコア213

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問