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これで、アップロード成功時に同時にDBへの保存も行われるようになります。
④ 実際にアップロードしてみる
ほとんどの解説ブログなどでは、モデルと結びついたフォーム (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ビューは以下 (upload.html.erb)
<%= form_tag '/upload_test/upload/', :multipart => true do %> <%= file_field_tag :photoname %> <%= submit_tag 'upload' %> <% end %>これでOKです。