tawa19
@tawa19

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

[Ruby on Rails]アップしたユーザーアイコン画像が表示されない

解決したいこと

ユーザー一覧ページ上にアップロードしたプロフィールアイコンが表示されない
環境はlocalhostです。

スクリーンショット参照↓

ユーザーのプロフィールページ(show.html.erb)
スクリーンショット 2023-12-08 13.25.41.png
ユーザー一覧ページ(index.html.erb)
スクリーンショット 2023-12-08 13.26.40.png

現状のコード

index.html.erb
<%= will_paginate %>

<ul class="users">
  <% @users.each do |user| %>
    <%= render user %>
  <% end %>
</ul>

<%= will_paginate %>

renderから飛ぶパーシャル

_user.html.erb
<li>
  <% if @user && @user.avatar? %>
    <%= image_tag @user.avatar.url, size: 50 %> <!-- ユーザープロフィール画像 -->
  <% else %>
    <%= image_tag ("noavatar.png"), size: 50 %> <!-- プロフィール画像未設定時のデフォルト画像 -->
  <% end %>
  <%= link_to user.name, user %>
</li>

念のためshowページのコードはこちらです

show.html.erb
<% provide(:title, @user.name) %>
<div class="row">
  <aside class="col-md-4">
    <section class="user_info">
      <h1>
        <% if @user.avatar? %>
          <%= image_tag @user.avatar.url %>
        <% else %>
          <%= image_tag ("noavatar.png") %>
        <% end %>

        <%= @user.name %>
      </h1>
    </section>
  </aside>
</div>

もし可能であれば、このような場合はどのようなテストを書けば良いでしょうか。
こちら余力があればで構いません。

以上、よろしくお願い致します。

0

3Answer

こちらは、ご自身の開発環境でしょうか?それともデプロイした後でしょうか?

herokuなどの無料版のプラットフォームにデプロイした際に、
画像や動画は保存できないことがあります。
有料版に変更すると表示されるかもしれません。

1Like

Comments

  1. @tawa19

    Questioner

    ご助言いただきありがとうございます。
    環境はrails serverしたlocalhostになります。サイト内でアカウント登録、画像アップロードを行いました。

ページのソースコードを表示して、どう言う画像URLへアクセスしようとしていて画像が表示されないのかを見るのが先決と思います。

1Like

Comments

  1. @tawa19

    Questioner

    ご回答ありがとうございます。
    ソースコードを確認したところ、プロフィールページの画像URLは<img src="http://localhost:3000/uploads/27524(2).jpg" />となっていました。

    しかし、indexページでのURL部分は<img src="/assets/noavatar-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.png" width="50" height="50" />(画像未設定ユーザーが表示する用のURL)となっていました。

  2. /assets/noavatarですよね?ということはif文でfalse経路でimage_tag ("noavatar.png")が表示されてるんじゃないですかね?

    で、そもそもnoavatar.pngなんて画像は無いと...

    _user.html.erb
    <li>
      <% if @user && @user.avatar? %>
      ...
    

    _user.*.erb配下の暗黙のオブジェクトってuserじゃないですかね?@userじゃなくて

    Screenshot 2023-12-09 at 13.26.58.jpg

「@user.avatar.url」の中身を表示して、意図したURLとなっているか確認してみては???

0Like

Comments

  1. @tawa19

    Questioner

    ご回答ありがとうございます。
    以下、rails console で確認した結果です。

    irb(main):001> @user = User.find_by(id: 101)
      User Load (0.4ms)  SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ?  [["id", 101], ["LIMIT", 1]]
    => 
    #<User:0x0000000106e22f78
    ...
    irb(main):002* if @user && @user.avatar?
    irb(main):003*   puts @user.avatar.url
    irb(main):004* else
    irb(main):005*   puts "User or avatar not found."
    irb(main):006> end
    http://localhost:3000/uploads/27524(2).jpg
    => nil
    

    ユーザー情報には表示したい画像のURLが入っておりました。

  2. 下記によると、「image_tagの表示するファイルの置き場所はapp/assets/imagesフォルダとpublicフォルダの2つが用意されています。」

    とのことなので、アバターで使用したいファイルの置き場所を変更すると表示されるようになりませんか?

    もしくはhtmlのimgタグを直書きしてはいかがでしょうか。

  3. @tawa19

    Questioner

    ありがとうございます。参考にしていろいろ試してみます。

Your answer might help someone💌