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

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

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

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

Ruby on Rails

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

Q&A

解決済

1回答

3247閲覧

usersテーブルに登録したプロフィール画像が、usersの各viewファイル下でしか画面に反映されない

akaki

総合スコア15

Ruby on Rails 5

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

Ruby on Rails

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

0グッド

0クリップ

投稿2020/05/12 23:34

編集2020/05/13 03:14

前提・実現したいこと

users_controllerのupdateアクションで登録した画像が、users_controllerで渡したviewファイル下でしか画面に反映しないため解決したいです。

<users_controllerの各アクションで表示されたviewでは、名前の下にプロフィール画像が表示される>
https://i.gyazo.com/8a4ede8629d3625c8e2c58b9ecedded0.png

<別のcontrollerのアクションで表示されたviewでは、名前の下に登録したプロフィール画像が表示されない>
https://i.gyazo.com/a865c2515278c5429154d4ed7c4fd234.png

該当のソースコード

UsersController

1class UsersController < ApplicationController 2 def show 3 @user = User.find(params[:id]) 4 @cafeterias = @user.cafeterias 5 end 6 7 def edit 8 @user = User.find(params[:id]) 9 if @user != current_user 10 redirect_to user_path(current_user), alert: "不正なアクセスです。" 11 end 12 end 13 14 def update 15 @user = User.find(params[:id]) 16 if @user.update(user_params) 17 redirect_to user_path(@user), notice: "ユーザー情報を更新しました。" 18 else 19 render :edit 20 end 21 end 22 23 private 24 def user_params 25 params.require(:user).permit(:username, :email, :password, :password_confirmation, :profile, :profile_image ) 26 end 27 28end

UsersEditHtmlHaml

1= form_with model: @user, class: "form", local: true do |f| 2 = f.text_field :username, placeholder: :名前の変更, class: "form-contents" 3 = f.file_field :profile_image 4 = f.text_area :profile, placeholder: :プロフィール情報を入力してください, class: "form-detail" 5 = f.submit '完了する', class: "form-btn" 6= render "shared/footer"

UsersRb

1class User < ApplicationRecord 2 # Include default devise modules. Others available are: 3 # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable 4 devise :database_authenticatable, :registerable, 5 :recoverable, :rememberable, :validatable 6 7 # mount_uploader :profile_image_id, ImageUploader 8 attachment :profile_image 9 has_many :cafeterias 10 validates :username, presence: true 11end

CafeteriaRb

1class Cafeteria < ApplicationRecord 2 validates :name, :addres, :detail, presence: true 3 belongs_to :user 4 5 mount_uploader :image, ImageUploader 6 attachment :profile_image 7end

<追記>

⬇︎⬇︎画像が表示できていない、cafeterias_controllerのコード⬇︎⬇︎

class CafeteriasController < ApplicationController def index @cafeterias = Cafeteria.includes(:user) end def new @cafeteria = Cafeteria.new end def create Cafeteria.create(cafeteria_params) redirect_to cafeterias_path end def show @cafeteria = Cafeteria.find(params[:id]) end def edit @cafeteria = Cafeteria.find(params[:id]) end def update cafeteria = Cafeteria.find(params[:id]) cafeteria.update(cafeteria_params) redirect_to cafeteria_path(cafeteria.id) end def destroy cafeteria = Cafeteria.find(params[:id]) cafeteria.destroy redirect_to cafeterias_path end private def cafeteria_params params.require(:cafeteria).permit(:name, :image, :detail, :addres).merge(user_id: current_user.id) end end

⬇︎views/users/show.html.haml(このビューには画像が表示される)

#header.big-bg .wrapper = render "shared/header" .page-title #{@user.username}さんのマイページ %section.section .container .columns.is-centered .column.is-8 .columns.is-centered .column.is-4 %figure.image.is-128x128{style: "margin-left: auto; margin-right: auto;"} = link_to edit_user_path do = attachment_image_tag @user, :profile_image, fallback: "images/no-image.png", class: "profile-image" .column.is-8 %table.table.is-fullwidth %tr %td.is-size-4 %strong= @user.username - if @user.id == current_user.id %td.is-size-4 = @user.email %td = link_to "編集", edit_user_path(@user), class: "button is-primary" %table.table.is-fullwidth %tr %td = @user.profile %section.section .cafeterias-container .columns.is-multiline - @cafeterias.each do |cafeteria| = render partial: "cafeterias/cafeteria", locals: { cafeteria: cafeteria } = render "shared/footer"

⬇︎views/cafeterias/show.html.haml(このビューには画像が表示されない)

#header.big-bg .wrapper = render "shared/header" .page-title #{@cafeteria.name}の詳細 %section.section .container .columns.is-centered .column.is-5 .card .card-image %figure.image.is-4by3 %tr %td= image_tag @cafeteria.image.to_s .card-content .media .media-content .cafeteriaTitle = @cafeteria.name .cafeteriaDate = @cafeteria.created_at.strftime("%Y年%m月%d日 %H時%M分") .content %table.table.is-narrow %tr %th 感想 %tr %td= simple_format @cafeteria.detail - if user_signed_in? && current_user.id == @cafeteria.user_id .videoManage = link_to "編集画面へ", edit_cafeteria_path(@cafeteria.id), class: "button is-success cafeteriaManage__edit" = link_to "投稿の削除", cafeteria_path(@cafeteria.id), method: :delete, class: "button is-danger cafeteriaManage__delete" .column.is-4 %article.panel.is-link %p.panel-heading By #{@cafeteria.user.username} .panel-block %p.control = @cafeteria.user.profile = link_to user_path(@cafeteria.user), class: "panel-block" do %span.panel-icon %i.fas.fa-user{"aria-hidden" => "true"} = @cafeteria.user.username さんのページへ = render "shared/footer"

⬇︎<さらに追記> 上手く画像が反映しないveiw(_cafetelia.html.haml)ファイルです。

.column.is-4 .card .card-image %figure.image.is-4by3 =link_to cafeteria_path(cafeteria.id), class: "content-image__box" do %tr %td= image_tag cafeteria.image.to_s .card-content .cafeteria-name = link_to cafeteria.name, cafeteria_path(cafeteria.id), class: "content__right__top--title" .media .media-left %figure.image.is-48x48 = attachment_image_tag @user, :profile_image, fallback: "images/no-image.png", class: "profile_image" .media--userName = link_to cafeteria.user.username, user_path(cafeteria.user), class: "content__right__bottom--userName--btn" .detail .detail--date = cafeteria.created_at.strftime("%Y年%m月%d日 %H時%M分")

上記の14行目

= attachment_image_tag @user, :profile_image, fallback: "images/no-image.png", class: "profile_image"

こちらのコードを反映させ、cafeteriasのコントローラー内のビューにusersで登録したprofile_imageを表示させたいのですが、上手くいきません、、、(画像があるのに空だと判断され、fallback: "images/no-image.png"が呼び込まれてしまいます)
こちらを解決したいです。

試したこと

ややこしいですが、cafeteriaの画像投稿にはcarrierwaveを、usersの画像投稿にはrefileを使用しています。
モデルの設定が間違っていると思い、mount_uploader :image, ImageUploaderを非表示にしてみたりして試したのですが改善されませんでした。

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

rails 5.2.4.2

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

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

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

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

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

winterboum

2020/05/13 02:34

表示できているviewとできていないview、及びそれらを表示するcontrollerを載せてください
guest

回答1

0

ベストアンサー

わからん。。。
「users_controllerのupdateアクションで登録した画像」って Userの画像ですね?
%td= image_tag @cafeteria.image.to_sは Cafeteriaの画像を表示しようとしています。(しかもprofile_imageでない)
Cafeteriaの画像を表示させるのでしたら、Cafeteriaの画像を登録する必要がありますが、してありますか?

Cafeteriaの持ち主? user の画像でしたら
%td= image_tag @cafeteria.user.profile_image.to_s です
(to_sでよかったけ、、という不安あり)

追記
Cafeteria の viewで
= attachment_image_tag @user, :profile_image,
としても、cntrollerで @user 定義していないからだめですよ。
= attachment_image_tag @cafeteria.user, :profile_image,

投稿2020/05/13 02:54

編集2020/05/13 03:40
winterboum

総合スコア23347

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

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

akaki

2020/05/13 03:15

追記で編集いたしました。言葉足らずですみません、、、 考えていただいて本当に助かります。お手すきの際に宜しくお願いいたします。
akaki

2020/05/13 04:56 編集

すみません、controllerの@userをどのように定義すればよろしいでしょうか。
winterboum

2020/05/13 07:15

表示したいuserを。 でもそれって @cafeteria.user じゃないの?
akaki

2020/05/13 07:44

すみません、まだ理解できません。 cafeterias_controllerのindexアクションにダメ元で def index @cafeterias = Cafeteria.includes(:user) @cafeteria.user = User.all end と書き込みましたがエラーになりました。具体的にどのように書き込めばよろしいでしょうか。
winterboum

2020/05/13 09:13

回答ちゃんと読んでます?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問