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

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

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

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

Q&A

解決済

1回答

3318閲覧

jbuilderでrelationのデータを取得する方法

Kimsehwa

総合スコア312

Ruby on Rails

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

0グッド

0クリップ

投稿2019/03/22 05:07

https://teratail.com/questions/180394#reply-268458
の続きです。

controllerで
@itemsをviewに渡して
viewでjbuilderを利用してitem.user情報をnestで表示しようとしてます。

最終的に以下のようなjsonを作りたいです。

item: { id: xx user: { origin_image_url: xxx } }

userは更にshrine(like carrierwave)を使っていて

item.user.image_url(:original)

上記の方法でuserのプロフィールイメージURLを特定できまして
itemとこのitem.userのimage_urlを取得したいです。

ただ、binding.pryを使うときには上記の値が取得できますが、使わない場合取得できませんでした。

binding.pryを使った場合

viewで以下のようにbinding.pryして

index.json.builder

json.array! @items do |t| json.id t.id binding.pry end

pry consoleで

t.user.image_url(:original)

を実行するとイメージURLが取得できました

binding.pryを使わない場合

index.json.builder

json.array! @items do |t| json.id t.id json.user_original_img t.user.image_url(:original) end

すると

Rendered api/items/index.json.jbuilder (30.1ms) Completed 500 Internal Server Error in 43ms (ActiveRecord: 2.4ms) ActionView::Template::Error (undefined method `image_url' for nil:NilClass):

エラーが出てしまいます

なお、userそのものは取得できました

json.array! @items do |t| json.id t.id json.user_info t.user end

result:

{ "id": 50, "user_info": { "id": 10, "provider": "email", "uid": "pepe@naver.com", "allow_password_change": false, "name": "pepe", "nickname": null, "image": { "id": "user/10/image/xx.jpg", "storage": "cache", "metadata": { "filename": "xx.jpg", "size": 764083, "mime_type": "image/jpeg", "width": 1280, "height": 960 } } } },

なにか良い方法がありましたら教えていただけますか。

その他設定はこちらに記載します。

model設定

app/models/item.rb

belongs_to :user

app/models/user.rb

has_many :item

controllerの設定

@items = Item.includes(:user).page(params[:page] ||= 1).per(8).order('created_at DESC') render 'index', formats: 'json', handlers: 'jbuilder'

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

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

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

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

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

guest

回答1

0

自己解決

一部行のuser_idにnilがあるのが問題でした

投稿2019/03/26 05:44

Kimsehwa

総合スコア312

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問