実現したいこと
表題の通り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での画像登録の方法を調べ、コードを書き直したりしましたが、改善されませんでした。
補足
特になし
改めてコードを確認したところコントローラーのストロングパラメーターが複数形になっていました。単数形に変更したところ画像の表示まではできました。
回答1件
あなたの回答
tips
プレビュー