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

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

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

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

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

1回答

1348閲覧

商品画像を取得・表示しようとするとエラーが出る

yuuki.kitazawa

総合スコア13

Ruby on Rails 5

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

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2019/04/02 12:12

編集2019/04/03 12:39

前提・実現したいこと

将来Webプログラマーになることを目指した学習のために
railsを使用して楽天商品検索APIを用いた商品の検索サイトを作成しています。

商品情報の検索・表示をテストしてみたところエラーが出ました。

発生している問題・エラーメッセージ

NoMethodError in ItemsController#new undefined method `gsub' for nil:NilClass Extracted source (around line #18): 16 name = result['itemName'] 17 url = result['itemUrl'] 18 image_url = result['mediumImageUrls'].first['imageUrl'].gsub('?_ex=128x128', '') 19 20 { 21 code: code, app/controllers/application_controller.rb:18:in `read' app/controllers/items_controller.rb:16:in `block in new' app/controllers/items_controller.rb:15:in `new' Request Parameters: {"utf8"=>"✓", "keyword"=>"ruby", "commit"=>"商品を検索"}

該当のソースコード

application_controller.rb

class ApplicationController < ActionController::Base protect_from_forgery with: :exception include SessionsHelper private def require_user_logged_in unless logged_in? redirect_to login_url end end def read(result) code = result['itemCode'] name = result['itemName'] url = result['itemUrl'] image_url = result['mediumImageUrls'].first['imageUrl'].gsub('?_ex=128x128', '') { code: code, name: name, url: url, image_url: image_url, } end end

items_controller.rb

class ItemsController < ApplicationController before_action :require_user_logged_in def new @items = [] @keyword = params[:keyword] if @keyword.present? results = RakutenWebService::Ichiba::Item.search({ keyword: @keyword, hits: 20, imageFlag: 1, }) results.each do |result| item = Item.find_or_initialize_by(read(result)) @items << item end end end end

_navbar.html.erb

<li> <%= link_to new_item_path do %> <span class="glyphicon glyphicon-plus" aria-hidden="true"></span> アイテムを追加 <% end %> </li>

new.html.erb

<div class="search"> <div class="row"> <div class="text-center"> <%= form_tag(new_item_path, method: :get, class: 'form-inline') do %> <div class="form-group"> <%= text_field_tag :keyword, @keyword, class: 'form-control input-lg', placeholder: "キーワードを入力", size: 40 %> </div> <%= submit_tag '商品を検索', class: 'btn btn-success btn-lg' %> <% end %> </div> </div> </div> <%= render 'items', items: @items %>

_items.html.erb

<% if items %> <div class="row"> <% items.each do |item| %> <div class="item"> <div class="col-md-3 col-sm-4 col-xs-12"> <div class="panel panel-default"> <div class="panel-heading text-center"> <img src="<%= item.image_url %>" alt="" > </div> <div class="panel-body"> <p class="item-title"><%= item.name %></p> </div> </div> </div> </div> <% end %> </div> <% end %>

試したこと

エラーをよく読んでみて色々試してみると、そもそもimageUrlが取得出来ていないように見えました。
データの取得に関してはちゃんと記述してあるように思うのですが、どこかに間違いがあるのでしょうか?

補足情報(FW/ツールのバージョンなど)

rails 5.2.2
ruby '2.4.1'
'rakuten_web_service' version:2017-07-06
windows7
AWS cloud9

3日間程詰まってしまっています。
初心者の拙い質問で申し訳ありませんが、ご回答いただければ幸いです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

result['mediumImageUrls'].firstimageUrl の項目が存在しないんじゃないですか?

投稿2019/04/10 01:41

aa37971

総合スコア24

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

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

yuuki.kitazawa

2019/04/14 14:46

なんとか自己解決しました、ありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問