Rails 画像のアップロード機能

f:id:takayanagi-prg:20180913182210j:image

 

今回の記事では

  • 画像のアップロード機能

について書きます

 

画像のアップロードにはまず画像のデータをデータベースに保存するためのカラム(ここではuser_image)を追加します

*ターミナルへの記述は青で書きます

rails g migration add_image_name_to_users

注意するのはmigrateでは無くmigrationと記述することです

これでdb/migrate/にファイルが作成されるのでそこで

〜省略

def change

add_column :users(テーブル名), :image_name(カラム名):string(データ型)

end

省略〜

これらはターミナルからではなく、ファイルからdbの変更を加える操作です

しかし変更の方はターミナルで操作しなければなりません

rails db:migrate

 

次はユーザー登録画面で登録時点でのデフォルトの画像をusersコントローラのcreateアクションに追加します

def create

@user = User.new(

name: params[:name]

email: params[:email]

image_name: "指定の画像のURL"

)

省略〜

end

 

次はビューに画像を表示させます画像を表示させたい.html.erbファイル内に

<img src="<%= "/画像の入っているフォルダ名/#{@user.image_name}" %>">

 

次は画像を送信出来るようにusers/edit.html.erbファイル内に

<%=form_tag("...", {multipart: true}) do %>

<input name="image" type="file">

を追加します

 

最後にusersコントローラ内のupdateアクションに

def update

〜省略

@user.image_name = params[:image_name]

 

if params[:image]

    @user.image_name  =

"#{@user.id}.jpg"

    image = params[:image]

    File.binwrite("public/フォルダ名/#{@user.image_name}", image.read)

end

省略〜

end

と書きます

@user.image_name = params[:image_name]

は画像のファイル名をimage_nameカラムに保存する為のものです

 

if params[:image]

    @user.image_name  =

"#{@user.id}.jpg"

    image = params[:image]

は画像データが送信されたらimage_nameカラムに画像のファイル名を代入し、

imageで送信されたものを受信し、

 

File.binwrite("〜")

は画像データをファイル内に作成するもので、()内の.readメソッドはその画像データを読み込むためのものです

 

今回は以上です。

最後の方に新しい知識がたくさん入ってきたので少し難しいですね。