Rails 画像のアップロード機能
今回の記事では
- 画像のアップロード機能
について書きます
画像のアップロードにはまず画像のデータをデータベースに保存するためのカラム(ここでは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メソッドはその画像データを読み込むためのものです
今回は以上です。
最後の方に新しい知識がたくさん入ってきたので少し難しいですね。