前提・実現したいこと
railsでwebアプリを制作しています。
ローカル開発環境で完成し、herokuへのアップロードをすることができました。
しかし画像投稿機能のみうまく機能していません。
実装したい画像投稿機能は、ユーザーアイコンの設定です。
ユーザー編集画面でアイコン画像の変更、そしてユーザー詳細画面でそのアイコンの表示ができるようにしたいと思っています(ユーザー登録時にはデフォルト画像が設定してあります)。また、それらの画像はpublicフォルダに保存されます。
画像投稿機能にはcarrierwaveなどのgemは使用していません。
調べたところherokuではサーバー上に画像を保存することはできないとのこと。
そこで外部ストレージを利用した方法について色々調べたのですが、carrierwaveを使用したものばかりが出てきてしまいます。ActiveStorageを使用する方法については調べて実行してみたのですが、どうcontrollerやviewを書き替えたらいいかよくわからず・・・。
自力ではどうすることもできませんでした。
どのようにファイルを書き換えたら画像投稿がうまくいくか、ご教授をお願い致します。
該当のソースコード
users_controller.rb
1 def show 2 @user = User.find_by(id: params[:id]) 3 @relationships_count = Relationship.where(followed_id: @user.id).count 4 end 5 6 def new 7 @user = User.new 8 end 9 10 def create 11 @user = User.new( 12 name: params[:name], 13 email: params[:email], 14 image_name: "defaul_user.jpg", 15 password: params[:password], 16 intro: "こんにちは!" 17 ) 18 19 if @user.save 20 session[:user_id] = @user.id 21 flash[:notice] = "ユーザー登録が完了しました!" 22 redirect_to("/map") 23 else 24 render("users/new") 25 end 26 27 28 end 29 30 def edit 31 @user = User.find_by(id: params[:id]) 32 end 33 34 def update 35 @user = User.find_by(id: params[:id]) 36 @user.name = params[:name] 37 @user.email = params[:email] 38 @user.intro = params[:intro] 39 40 if params[:image] 41 @user.image_name = "#{@user.id}.jpg" 42 image = params[:image] 43 File.binwrite("/home/vagrant/tweet_app/public/user_images/#{@user.image_name}",image.read) 44 end 45 46 if @user.save 47 flash[:notice] ="ユーザー情報を編集しました!" 48 redirect_to("/users/#{@user.id}") 49 else 50 render("users/edit") 51 end 52 end 53 54 def login_form 55 56 end 57 58 59 60end 61
show.html.erb
1<div class="user"> 2 <img src="<%= "/user_images/#{@user.image_name}"%>"> 3 <h2><%= @user.name %></h2> 4 <p><%= @user.email %></p> 5 <p><%= simple_format @user.intro %></p> 6 7 <% if @user.id == @current_user.id %> 8 <%= link_to("編集","/users/#{@user.id}/edit") %> 9 <% end %> 10 </div>
edit.html.erb
1 2 <%= form_tag("/users/#{@user.id}/update", {multipart: true}) do %> 3 <p>ユーザー名</p> 4 <input name="name" value="<%= @user.name %>"> 5 6 <p>画像</p> 7 <input type="file" name="image" value="<%= @user.image_name %>"> 8 9 <p>ユーザーID</p> 10 <input name="email" value="<%= @user.email %>"> 11 12 <p>自己紹介</p> 13 <textarea name="intro"><%= simple_format @user.intro %></textarea> 14 15 <input type="submit" value="保存"> 16 <% end %> 17 </div>
補足情報(FW/ツールのバージョンなど)
Rails 5.2.4.2
ruby 2.6.5p114 (2019-10-01 revision 67812) [x86_64-linux]
heroku/7.40.0 linux-x64 node-v12.16.2
ruby 2.6.5p114 (2019-10-01 revision 67812) [x86_64-linux]
centos-6.8
現在はデーターベースのuserテーブル内にあるimage_nameカラムを使用して画像の保存を行っています。
また、外部ストレージサービスとしてはAmazonS3を使いたいと思っています(バケットの設定は完了しています)。
heroku環境下でも画像の投稿、保存ができる方法のわかる方、よろしくお願いいたします。
あなたの回答
tips
プレビュー