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

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

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

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Ruby

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

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

Ruby on Rails

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

Q&A

0回答

1161閲覧

railsアプリの画像投稿機能をherokuでも機能させたい

aiskrai

総合スコア8

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Ruby

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

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

Ruby on Rails

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

0グッド

0クリップ

投稿2020/05/02 12:32

編集2020/05/02 12:37

前提・実現したいこと

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環境下でも画像の投稿、保存ができる方法のわかる方、よろしくお願いいたします。

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問