前提・実現したいこと
Ruby on Railsでティンダーのようなマッチングサービスを作っています。
AmazonのS3を活用。CarrierWaveを使用してユーザーのプロフィール画像をアップロードする機能を実装中に以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
Errno::EISDIR in UsersController#update Is a directory @ rb_sysopen - public/user_images/
該当のソースコード
@user.profile_img="#{@user.id}.jpg" img_name=params[:profile_img] File.binwrite("public/user_images/#{@user.profile_img}",img_name.read) end if@user.save flash[:notice]="編集が完了しました"
試したこと
ファイル名が保存できていないため、
binding.pryで確認を行った結果
@user.profile_img="#{@user.id}.jpg"
の@user.profile_imgがnilになっていました。
補足情報(FW/ツールのバージョンなど)
ユーザーの新規登録時は画像は登録しません。
新規登録後に編集ページに移行しまして、画像のアップロードを行います
edit
1edit.html 2画像アップロードのviewです。 3 4<%= form_tag("/users/#{@user.id}/update",{multipart: true})do%> 5<% @user.errors.full_messages.each do |message| %> 6 <div class="form-error"> 7 <%= message %> 8 </div> 9<% end %> 10 11<div class="form-group_img"> 12<p class="txt">プロフィール画像</p> 13<input name="profile_img" type="file" class="profileimg"> 14</div>
userscontroller
1users_controller 2編集のアクションです。 3 4 def update 5 @user=User.find_by(id:params[:id]) 6 @user.name=params[:name] 7 @user.university=params[:university] 8 @user.self=params[:self] 9 @user.sex=params[:sex] 10 @user.graduate=params[:graduate] 11 12 13 if params[:profile_img] 14 @user.profile_img="#{@user.id}.jpg" 15 img_name=params[:profile_img] 16 File.binwrite("public/user_images/#{@user.profile_img}",img_name.read) 17 end 18 if@user.save 19 flash[:notice]="編集が完了しました" 20 redirect_to("/posts/index") 21 else 22 render("users/edit") 23 end 24 end
ProfileImgUploader
1app/uploaders/profile_img_uploader.rb 2class ProfileImgUploader < CarrierWave::Uploader::Base 3 # Include RMagick or MiniMagick support: 4 # include CarrierWave::RMagick 5 # include CarrierWave::MiniMagick 6 7 # Choose what kind of storage to use for this uploader: 8 # storage :file 9 storage :fog 10 11 # Override the directory where uploaded files will be stored. 12 # This is a sensible default for uploaders that are meant to be mounted: 13 def store_dir 14 "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" 15 end 16end 17
gemfile
1下記、該当するであろうgemファイルになります。 2gem 'carrierwave', '~> 1.0' 3gem 'fog-aws' 4gem 'dotenv-rails' 5gem 'mini_magick'
user
1app/models/user.rb 2ユーザーのモデルになります。 3class User < ApplicationRecord 4 5 mount_uploader :profile_img, ProfileImgUploader 6 has_many :posts, dependent: :destroy 7end
あなたの回答
tips
プレビュー