attachment_fuを導入して画像をアップロードしましょう。

まずRMagickをインストールする必要が有ります。
ここで、RMagick は ImageMagickRubyで動かすためのラッパーですから、
最初にImageMagickをインストールしましょう。


こちらを参考にMacPortを使ってImageMagickをインストールします。

sudo port install tiff -macosx imagemagick +q8 +gs +wmf


続いて、RMagickをインストールしましょう。

sudo gem install rmagick


ここで注意したいのが、インストールが終わった後、
"Successfully installed"というメッセージがでても、
それはRMagicが正常にインストールされたという保証はないそうです。


irbを立ち上げて次のように確認できて、初めてインストール完了だそうです。

$ irb -rubygems -r RMagick
irb(main):001:0> puts Magick::Long_version
This is RMagick 2.11.1 ($Date: 2009/09/05 20:01:08 $) Copyright (C) 2009 by Timothy P. Hunter
Built with ImageMagick 6.5.5-0 2009-09-10 Q8 OpenMP http://www.imagemagick.org
Built for ruby 1.8.7
Web page: http://rmagick.rubyforge.org
Email: rmagick@rubyforge.org
=> nil


HTMLドキュメントが
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/share/RMagick/index.html
に保存されているので、こちらも確認しておきましょう。



ここからが、やっとattachment_fuのインストールです。

ruby script/plugin install http://svn.techno-weenie.net/projects/plugins/attachment_fu


アップロードする写真用のモデルを作成します。

script/generate model photo


デフォルトでは下記のようにマイグレーションを行いましょう。

class CreatePhotos < ActiveRecord::Migration
  def self.up
    create_table :photos do |t|
      t.column :parent_id,  :integer
      t.column :content_type, :string
      t.column :filename, :string    
      t.column :thumbnail, :string 
      t.column :size, :integer
      t.column :width, :integer
      t.column :height, :integer
      t.timestamps
    end
  end

  def self.down
    drop_table :photos
  end
end


app/models/photo.rbでの設定はこんな感じ。

class Photo < ActiveRecord::Base
  belongs_to :product

  has_attachment :content_type => :image, 
                 :max_size => 5.megabytes,
                 :resize_to => '500x500>',
                 :thumbnails => { #:small => '30x30>',
                                  :thumb => '100x100>' 
                                },
                 :path_prefix => 'public/photos',
                 # Uses public/#{table_name} by default for the filesystem, and just #{table_name} for the S3 backend.
                 :storage => :file_system

  validates_as_attachment

  def full_filename(thumbnail = nil)
    file_system_path = (thumbnail ? thumbnail_class : self).attachment_options[:path_prefix].to_s
    File.join(RAILS_ROOT, file_system_path, *partitioned_path(thumbnail_name_for(thumbnail)))
  end
end

その他、ViewやControllerの詳しい設定はこちら。
http://d.hatena.ne.jp/nyaago69/20090609/1244555484