Railsで、「ファイルをアップロードし、そのファイルのパスをデータベースに保存する」という処理を行いたい場合、CarrierWave を使えばできます。
① CarrierWave をインストール
まず、Gemfileに以下を追加
- gem 'carrierwave' # これを追加
$ bundle install
② アップロード用のクラスを作成する
- $rails generate uploader image
このコマンドを実行すると、app/uploaders/image_uploader.rb (ImageUploaderクラス) が作成されます
③ 画像アップロード用に、モデルを定義
images というテーブル (モデルはImage) に、imagename というカラム名で、ファイル名を管理するとします。

つまり、imagename は string型 としてmigrationしてあげればOKです。
このテーブルに対するモデルを以下のように定義します。
- class Image < ActiveRecord::Base
- attr_accessible :imagename
- mount_uploade :imagename, ImageUploader
- end
④ 実際にアップロードしてみる
ほとんどの解説ブログなどでは、モデルと結びついたフォーム (form_for) を利用しているので、ここでは、そうでない場合のやり方で書いてます (form_tag利用)
コントローラーは以下
- class UploadTestController < ApplicationController
- def upload
- unless params[:photoname].nil? then
- image = Image.new
- image.imagename = params[:imagename]
- image.save # ここでアップロード処理とDB保存処理が走る
- end
- end
- end
- <%= form_tag '/upload_test/upload/', :multipart => true do %>
- <%= file_field_tag :photoname %>
- <%= submit_tag 'upload' %>
- <% end %>