【Rails3】CarrierWaveで画像ファイルのアップロード

(環境:Mac OS X Leopard, Ruby1.9.2, Rails3.1.1)

RMagickも使いますので、事前にインストールしてあります。
(結構時間が掛かった記憶があります・・・。)

$ sudo port install ImageMagick
$ sudo gem install rmagick


ファイルのアップロード用ライブラリとしてCarrierWaveというgemを使って、
画像アップロードアプリを作ってみたいと思います。

既存のRailsアプリに画像をアップロードする機能を追加する事にします。

$ rails g scaffold fishing kind:string place:string fished:date

サンプルとしてfishingといモデル名でscaffoldして土台を作ってあります。

まず準備です。
Gemfileへ追加

+ gem 'rmagick'
+ gem 'carrierwave'

変更を反映します。

$ bundle install

アップロード用のクラスの生成

$ rails g uploader image

ImageUploaderクラスが作られます。
app/uploaders/image_uploader.rb

次にfishingモデルにアップローダを追加します。
fishingsテーブルに列を追加するため、migrationを生成します。

$ rails g migration add_image_to_fishings image:string
$ rake db:migrate

app/modeles/fishing.rbへ追加

class Fishing < ActiveRecord::Base
+ attr_accessible :kind, :place, :fished, :image
+ mount_uploader :image, ImageUploader
end

app/views/fishings/_form.html.erbを修正

ー <%= form_for(@fishing) do |f| %>
+ <%= form_for( @fishing, :html => {:multipart => true} ) do |f| %>
・・・


+ <%= f.label :image %>

+ <%= f.file_field :image %>

app/views/fishings/index.html.erbの表示したい場所に追加

+ <%= image_tag fishing.image_url(:thumb).to_s %>

app/views/fishings/show.html.erbの表示したい場所に追加

+ <%= image_tag @fishing.image_url.to_s %>

ここで画像サイズを自動で調整してくれるRMagickを使います。
app/uploaders/image_uploader.rbを修正
(6行目辺り)
# include CarrierWave::RMagick
この記述の行のコメント(#)を削除し有効にします。

include CarrierWave::RMagick

下記も追加します。

+ version :thumb do
+ process :resize_to_limit => [200, 200]
+ end

サーバ起動して、
http://localhost:3000/fishings
にアクセスして画像がアップロード出来るようになりました。

# ####
# ### At Bat Web Studio 出水ベースのWeb屋
# ## サイバーまめカン ストックメディア
# #