59
63

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

railsで画像を投稿、保存する処理

Posted at

やりたいこと

railsでプロフィール画像など画像を投稿、DBに保存したい時のやり方。

仕様書

  • image_nameカラムをユーザーのtableに用意
  • デフォルトの画像を設定し、もし専用の画像がDBにあったら代入するようにする。
  • public内に専用フォルダを作成し、そこに画像データを格納、画像の名前をDBに格納
  • そこからURLで引っ張る
  • updateアクションを作成し、画像を編集できるようにする

image_nameカラムの作成

rails g migration ファイル名

でマイグレーションファイルを作成。

マイグレーションファイルのchangeメソッドに

def change 
 add_column :テーブル名, :カラム名, :データ型
end

でその後rails db:migrationで反映。

デフォルト画像の設定

デフォルト画像の格納

users_controller.rb
def create
 @user = User.new(
 name:params[:name]
 email:params[:email]
 image_name:"default_user.jpg"
)
end

上記で記述し、画像が入ってなかったらデフォルトのものがでるようにする。.jpgも入れる。(投稿されたものがjpg以外の者の可能性もあるので形式もカラムに入れる)

デフォルト画像をviewに表示する

users/show.html.erb
<img src="<%= "/user_images/#{@user.image_name}" %>">

htmlのため/ではじまる。

public内に専用フォルダを作成し、そこに画像データを格納、画像の名前をDBに格納

  • createアクションを作成し、そこで下記を行う。
    • public/に画像を格納
    • 画像の名前をDBに保存

inputの設置

users/edit.html.erb
<%= form_tag("URL",{multipart:true}) %>
<input name="image" type="file">

form_tagには{multipart:true}を設定し、inputのtypeもfileに

updateアクションを作成し、画像を編集できるようにする

user_controller.rb
if params[:image]
 @user.image_name = "#{@user.id}.jpg"
 image = params[:image]
 File.binwrite("public/user_images/#{@user.image_name}", image.read)
end

もしimageが入っていた場合、@user.image_nameにその画像の名前を入れて

user_controller.rb
File.binwrite("public/user_images/#{@user.image_name}", image.read)

でフォルダに保存

59
63
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
59
63

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?