🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Ruby

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

YouTube API

YouTube APIはYouTubeのビデオコンテンツと機能性をウェブサイト、アプリケーション、デバイスに統合することを可能にします。

Ruby on Rails

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

Q&A

解決済

1回答

936閲覧

ControllerでのNoMethodErrorを解決したい

haru16-no14

総合スコア8

Ruby

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

YouTube API

YouTube APIはYouTubeのビデオコンテンツと機能性をウェブサイト、アプリケーション、デバイスに統合することを可能にします。

Ruby on Rails

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

0グッド

0クリップ

投稿2020/01/05 09:53

###作業について
Youtube APIを使ったWebアプリを作成しています。

現在、
キーワードを入力→検索→検索結果(動画)を表示
を行うための、Controllerを作成しております。

####Controler

class VideosController < ApplicationController before_action :require_user_logged_in require 'google/apis/youtube_v3' def new @videos = [] @keyword = params[:q] if @keyword.present? youtube = Google::Apis::YoutubeV3::YouTubeService.new youtube.key = "YOUTUBE API KEY" results = youtube.list_searches(part="snippet" , type: "video" , q: @keyword , max_results: 3 , order: :date , ) results.item.each do |result| video = Video.new(read(result)) @video << video end end end private def read(result) video_id = result['id.videoId'] channel_id = result['snippet.channelId'] video_title = result['snippet.title'] channel_title = result['snippet.channelTitle'] thumbnail_url = result['snippet.thumbnails.(medium).url'] { video_id: video_id, channel_id: channel_id, video_title: video_title, channel_title: channel_title, thumbnail_url: thumbnail_url, } end end

###エラー
以前楽天APIを使用した際のファイルを参考に、コードを描いてみたのですが、エラーになってしまいます。

####エラーコード

NoMethodError (undefined method `[]' for #<Google::Apis::YoutubeV3::SearchResult:0x00007f5188c231a8>):

検索結果から、欲しい値を読み出して、最後にハッシュとしてリターンするために書いた read メソッドが原因のようですが、この部分をどのように改善したらいいのかがわかりません。

分かる方がいらっしゃいましたら、お教えいただけると幸いです。
よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

こういうときに便利なgemがあるのですが、 pry-rails, pry-byebug という2つのgemをインストールしてみるとよいと思います。

以下の記事に簡単な使い方が書いてありますので、使ってみてください。
デバックツール(pry-rails)について binding.pryの使い方

binding.pryを差し込むポイントとしては、エラーが発生する直前の行がおすすめです。
止まったところで、[]のレシーバとなっている変数の中身を見てみましょう。

投稿2020/01/05 10:06

siruku6

総合スコア1382

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

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

haru16-no14

2020/01/06 09:43

回答ありがとうございます。 お教えいただいた、pry-railsを使ってみたのですが、 Traceback (most recent call last): videos_controller.rb:28:in `<main>': undefined method `pry' for #<Binding:0x00000000020cb708> (NoMethodError) というエラーが出てしまい、うまく使いこなせませんでした。もう少し使い方等詳しく調べて、試行錯誤してみようと思います。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問