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

ファイルのアップロード用ライブラリで**CarrierWave**を使って、
画像アップロードをしてみたいと思います。
(環境:Ubuntu12.04, Ruby1.9.3, Rails3.1.13)

CarrierWaveはRMagickを使うので、事前にインストールしてあります。

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

サンプルとしてfishingといモデル名でscaffoldして土台を作ります。
[shell]
$ rails g scaffold fishing kind:string place:string fished:date
[/shell]

Gemfileへ追加します。

[shell]
+ gem ‘rmagick’
+ gem ‘carrierwave’
[/shell]

変更を反映します。

[shell]
$ bundle update
[/shell]

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

[shell]
$ rails g uploader image
[/shell]

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

次にfishingモデルにアップローダを追加します。

fishingsテーブルに列を追加するため、migrationを生成します。

[shell]
$ rails g migration add_image_to_fishings image:string
$ rake db:migrate
[/shell]

app/modeles/fishing.rbへ追加

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

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

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

+ <%= f.label :image %>
+ <%= f.file_field :image %>
[/ruby]

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

[ruby]
+ <%= image_tag fishing.image_url(:thumb).to_s %>
[/ruby]

app/views/fishings/show.html.erbへも追加

[ruby]
+ <%= image_tag @fishing.image_url.to_s %>
[/ruby]

ここで画像サイズを自動で調整してくれるRMagickを使います。

app/uploaders/image_uploader.rbを修正

この記述の行のコメント(#)を削除し有効にします。

[ruby]
ー# include CarrierWave::RMagick
+include CarrierWave::RMagick
[/ruby]

下記も追加します。

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

NoMethodError (undefined method `scale’〜 というエラーが出るので:scaleから:resize_to_limit へ変更すれば良いみたいです。
Undefined Method Scale In CarrierWave

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

鹿児島県の出水市という所に住んでいまして、インターネット周辺で色々活動して行きたいと思ってるところです。 Webサイト作ったり、サーバ設定したり、プログラムしたりしている、釣りと木工好きなMacユーザです。 今はデータサイエンスに興味を持って競馬AI予想を頑張ってます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です


The reCAPTCHA verification period has expired. Please reload the page.

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください