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

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

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

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

Ruby on Rails

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

Q&A

1回答

1719閲覧

画像表示されるときとされない時がある。

murohi-08

総合スコア12

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2021/01/03 13:51

個人開発でNewAPIを使った、簡単なニュースサイトを作ってみましたが、画像の表示がうまくいきません。大半は常時表示さている(一部非表示)のですが、たまに以下のようなエラーが出てブラウザ自体が非表示になってしまいます。エラー文からはarticleの中身の引数が空になってしまっているとのことですので、インターネット上に画像データを保存・共有ができていないからだと考えています。
どなたか原因をご教授願えれば幸いです。よろしくお願いします。

コード ArgumentError in News#index Showing /Users/hiromu/original/app/views/news/index.html.erb where line #26 raised: Extracted source (around line #26): 24 25 26 27 28 29 </div> <div class="image"> <%= image_tag article["urlToImage"],:size =>'240x160' %> </div> <div class="content"> <%= article["description"] %>
app/controllers/news_controller.rb class NewsController < ApplicationController require "open-uri" def index news_api_key = ENV["NEWS_API_KEY"] uri = "http://newsapi.org/v2/top-headlines?country=jp&apiKey=#{news_api_key}" article_serialized = open(uri).read @articles = JSON.parse(article_serialized) end end
app/views/news/index.html.erb <main class="main"> <div class="inner"> <% if user_signed_in? %> <div class="greeting"> <%= link_to current_user.name, class: :greeting__link%> </div> <% end %> </div> <header> <p class="font">Powered by <a href="https://newsapi.org", class="btn">News API</a></p> </header> <div class="articles"> <% @articles["articles"].each do |article| %> <div class="article"> <div class="title"> <%= link_to article["title"], article["url"] %> </div> <div class="wrapper"> <div class="date"> <%= article["publishedAt"] %> </div> <div class="source"> <%= article["source"]["name"]%> </div> <div class="image"> <%= image_tag article["urlToImage"],:size =>'240x160' %> #この部分になります。 </div> <div class="content"> <%= article["description"] %> </div > </div> </div> <% end %> </div> </main>

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

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

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

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

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

guest

回答1

0

article_serialized = open(uri).read に失敗した場合などでしょう。
空 でなく nil では?
article や article["urlToImage"] がnilや空であった時に
<%= image_tag article["urlToImage"],:size =>'240x160' %>
を実行しないか、ダミーの画像を表示されるかすればよいでしょう

投稿2021/01/03 14:01

winterboum

総合スコア23567

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

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

murohi-08

2021/01/03 15:27

ご回答くださり誠にありがとうございます。image_tagの部分を除けばエラーは出ませんが、今回の場合はNewsAPIを使った実装となりますので、記事と画像を表示させたいです。時が経てば一部非表示になりますが、画像表示はうまくいきます。ですが時たまArgumentError Nil location provided. Can’t build URIのエラーとなって、これではニュースアプリとしては未成熟になってしまいます。URIがnilとなってしまうのは何故でしょうか?現在自分もエラー内容に関して調べております。恐縮ですが、ご教授願えますでしょうか?
winterboum

2021/01/03 22:01 編集

それは open(uri).read が失敗しているか、もしくは成功しているがデータがないか であって、このプログラムの問題ではないです。 原因を突き止めるには open(uri).read の結果とURIの存在有無などをlogなどに残して解析する必要があります。 ああ、 このプログラムの問題である可能性が一つ、JSON.parse(article_serialized)が失敗する 「open(uri).read の結果パターン」がある、ですね。 これもデータを残して解析ですね。
murohi-08

2021/01/04 08:24

詳しく解説してくださり、ありがとうございます。JSONのデータを残すにはどのような記述が必要になるでしょうか? プログラミング初心者ですので、URIの扱いがあやふやでいます。 画像を常時表示するにはどの箇所を修正すればよろしいでしょうか?もしくはどのファイルにコードを付け加えればよろしいでしょうか?何度も恐縮ですが、よろしくお願いします。
winterboum

2021/01/04 08:28

json_str に JSONが入っているとして logger.debug json_str で logs/development.log などに書きだされます
murohi-08

2021/01/04 09:18

解説ありがとうございます。logger.debug json_strはどこのファイルのどの部分に記述したらよろしいでしょうか? 調べましたが、参考になるものがなかったのでご教授いただければ幸いです。
winterboum

2021/01/04 10:35

jsonが作れたところに書いてください
murohi-08

2021/01/04 12:22

すいません、何度も失礼します。このような記述になりますでしょうか?↓ class NewsController < ApplicationController require "open-uri" def index news_api_key = ENV["NEWS_API_KEY"] uri = "http://newsapi.org/v2/top-headlines?country=jp&apiKey=#{news_api_key}" article_serialized = open(uri).read @articles = JSON.parse(article_serialized)    logger.debug json_str ←#このような感じでしょうか? end end
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問