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

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

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

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

Q&A

解決済

1回答

68閲覧

activestorageでの画像の表示

G23

総合スコア18

Ruby on Rails

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

0グッド

0クリップ

投稿2024/12/16 11:59

実現したいこと

表題の通りactivestorageでの画像の表示と画像を表示した時に付随する形で削除ボタンを表示したいです。

発生している問題・分からないこと

activestorageを実装するまではできていますが、画像の表示ができません。
また、削除ボタンの実装をどうすればいいか分かりません。

該当のソースコード

photo_upload.html.erb

1<div class="container mt-4"> 2 <div class="row"> 3 <div class="col-md-3"> 4 <%= render 'room_menu' %> 5 </div> 6 <div class="col-md-9"> 7 <div class="card"> 8 <div class="card-body"> 9 <h4 class="mt-4 mb-4"><b>写真アップロード</b></h4> 10 11 <%= form_with model: @room do |f| %> 12 <% binding.pry %> 13 <%= f.label :photo, "画像" %><br> 14 <%= f.file_field :photo %> 15 <%= f.submit %> 16 <% end %> 17 18 <% if @room.photo.attached? %> 19 <div><%= image_tag(@room.photo) %></div> 20 <% end %> 21 22 </div> 23 </div> 24 </div>

rooms_controller.rb

1class RoomsController < ApplicationController 2 3 protect_from_forgery except: [:upload_photo] 4 5 before_action :set_room, except: [:index, :new, :create] 6 before_action :authenticate_user!, except: [:show] 7 before_action :is_authorised, only: [:listing, :pricing, :description, :photo_upload, :amenities, :location, :update] 8 9 def index 10 @rooms = current_user.rooms 11 end 12 13 def new 14 @room = current_user.rooms.build 15 end 16 17 def create 18 @room = current_user.rooms.build(room_params) 19 if @room.save 20 redirect_to listing_room_path(@room), notice: "保存しました。" 21 else 22 flash[:alert] = "問題が発生しました。" 23 render :new 24 end 25 end 26 27 def listing 28 end 29 30 def pricing 31 end 32 33 def description 34 end 35 36 def photo_upload 37 end 38 39 def amenities 40 end 41 42 def location 43 end 44 45 def update 46 new_params = room_params 47 new_params = room_params.merge(active: true) if is_ready_room 48 49 if @room.update(new_params) 50 flash[:notice] = "保存しました。" 51 else 52 flash[:alert] = "問題が発生しました。" 53 end 54 redirect_back(fallback_location: request.referer) 55 end 56 57 def upload_photo 58 @room.photo.update(params[:file]) 59 render json: { success: true } 60 end 61 62 def delete_photo 63 @image = ActiveStorage::Attachment.find(params[:photo_id]) 64 @image.purge 65 redirect_to photo_upload_room_path(@room) 66 end 67 68 69 private 70 def set_room 71 @room = Room.find(params[:id]) 72 end 73 def room_params 74 params.require(:room).permit(:home_type, :room_type, :accommodate, :bed_room, :bath_room, :listing_name, :summary, :address, :is_tv, :is_kitchen, :is_air, :is_heating, :is_internet, :price, :active, :description, :photos) 75 end 76 77 def is_authorised 78 redirect_to root_path, alert: "権限がありません。" unless current_user.id == @room.user_id 79 end 80 81 def is_ready_room 82 !@room.active && !@room.price.blank? && !@room.listing_name.blank? && !@room.photos.blank? && !@room.address.blank? 83 end 84 85end

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

activestorageでの画像登録の方法を調べ、コードを書き直したりしましたが、改善されませんでした。

補足

特になし

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

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

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

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

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

G23

2024/12/18 11:44

改めてコードを確認したところコントローラーのストロングパラメーターが複数形になっていました。単数形に変更したところ画像の表示まではできました。
guest

回答1

0

自己解決

imageタグで画像が表示されない
ストロングパラメーターの指定ミス
誤:photos 正:photo

画像に付随する削除ボタンの実装
room_controlloer.erbのdelete_photoを
@image = ActiveStorage::Attachment.find(params[:photo_id])
@image.purge
から
@room = Room.find(params[:id])
@room.photo.purge
に変更。元のままだとIDエラーが発生します。
画像の表示については初歩的な部分の見落としでした。また削除ボタンについては基本的な書き方で実装できました。

投稿2024/12/19 12:13

G23

総合スコア18

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問