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

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

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

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

Q&A

0回答

430閲覧

CarrierWaveで画像がのファイル名が保存できない

takeshikubota

総合スコア10

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

0グッド

0クリップ

投稿2019/02/28 08:05

前提・実現したいこと

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

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問