
ファイルのアップロード用ライブラリで**CarrierWave**を使って、
画像アップロードをしてみたいと思います。
(環境:Ubuntu12.04, Ruby1.9.3, Rails3.1.13)
CarrierWaveはRMagickを使うので、事前にインストールしてあります。
既存のRailsアプリに画像をアップロードする機能を追加する事にします。
サンプルとしてfishingといモデル名でscaffoldして土台を作ります。
1 |
$ rails g scaffold fishing kind:string place:string fished:date |
Gemfileへ追加します。
1 2 |
+ gem 'rmagick' + gem 'carrierwave' |
変更を反映します。
1 |
$ bundle update |
アップロード用のクラスの生成
1 |
$ rails g uploader image |
ImageUploaderクラスが作られます。
app/uploaders/image_uploader.rb
次にfishingモデルにアップローダを追加します。
fishingsテーブルに列を追加するため、migrationを生成します。
1 2 |
$ rails g migration add_image_to_fishings image:string $ rake db:migrate |
app/modeles/fishing.rbへ追加
1 2 3 4 |
class Fishing < ActiveRecord::Base + attr_accessible :kind, :place, :fished, :image + mount_uploader :image, ImageUploader end |
app/views/fishings/_form.html.erbを修正
1 2 3 4 5 6 |
ー <%= 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の表示したい場所に追加
1 |
+ <%= image_tag fishing.image_url(:thumb).to_s %> |
app/views/fishings/show.html.erbへも追加
1 |
+ <%= image_tag @fishing.image_url.to_s %> |
ここで画像サイズを自動で調整してくれるRMagickを使います。
app/uploaders/image_uploader.rbを修正
この記述の行のコメント(#)を削除し有効にします。
1 2 |
ー# include CarrierWave::RMagick +include CarrierWave::RMagick |
下記も追加します。
1 2 3 |
+ version :thumb do + process :resize_to_limit => [200, 200] + end |
NoMethodError (undefined method `scale’〜 というエラーが出るので:scaleから:resize_to_limit へ変更すれば良いみたいです。
Undefined Method Scale In CarrierWave
サーバ起動して、
http://localhost:3000/fishings
にアクセスして画像がアップロード出来るようになりました。
こういうブログもありました。
- ニッカンツイッター 2011-11-19(レスポンシブwebデザイン・Rails3 画像ファイルのアップロード)
- Railslでカラム名(列名)の追加と削除と変更
- カレントディレクトリ以下にある画像ファイルのリサイズをRubyとImageMagickで。
- Rubyで画像の解像度を変更してみる
- ニッカンツイッター 2011-09-03(Y Combinator、Rails3.1、背景が輝くアイキャッチ画像)
人気のあるブログ:
- 新しいgemのアップデート方法(rubygems-update)
- Coda2でscssを使うときのお供にcompassをどうぞ。
- bashでUTF-8に設定して日本語表示したり使ったり。Emacsでも。
- NginxをSSL付きで動かすために設定したこと
- Macでフォルダを結合したいとき