Ruby on Rails (3.x >= 3.2.9) のためのブログです (どっちかというと社内ブログ的な感じで、基礎から書いてきます) 。
Comments


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です。

Categories: , , ,

Leave a Reply