前提・実現したいこと
将来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日間程詰まってしまっています。
初心者の拙い質問で申し訳ありませんが、ご回答いただければ幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/04/14 14:46