paperclipおぼえがき

paperclipの簡単な使い方について書く。
https://github.com/thoughtbot/paperclip

環境

Rails 3.2.12
ruby-1.9.3-p374
paperclip (3.4.1)

だいたいの手順

(0) ImageMagickportsでインストール
(1)マイグレーションファイルを作成

画像と紐付けたいモデルにpaperclipの項目を付加する

(2)モデルにpaperclipの設定情報を書く

Userモデルに画像をくっつけたいならUserモデルに書く。

(3)テンプレートに画像を参照する入力フォームを作る

paperclipが用意しているヘルパーメソッドをViewに書く

(4)呼び出し方

(0) ImageMagickportsでインストール

ちょっと時間かかる

$ sudo port install ImageMagick

(1)マイグレーションファイルを作成

以下のような内容のマイグレーションファイルを作成する。

def up
  add_attachment :animals, :avatar
end

def down
  remove_attachment :animals, :avatar
end

(2)モデルにpaperclipの設定情報を書く

同じく以下を画像を関連づけたいモデルに、attr_accessibleとhas_attached_fileを定義する。

class User < ActiveRecord::Base
  attr_accessible :avatar
  has_attached_file :avatar, :styles => { :medium => "300x300>", :thumb => "100x100>" }, :default_url => "/images/:style/missing.png"
end

(3)テンプレートに画像を参照する入力フォームを作る

以下をformの中に書く。scaffoldで作成したフォームがあるならfile_fieldメソッドだけでよい。

<%= form_for @user, :url => users_path, :html => { :multipart => true } do |form| %>
  <%= form.file_field :avatar %>
<% end %>

(4)呼び出し方

<%= image_tag @animal.avatar.url(:thumb) %>

urlメソッドにモデルで定義している文字を渡してやればその大きさで表示してくれる。

削除

@animal.avatar = nil
@animal.save

(確か)この時にレコードはもちろんのこと、ファイルとして保存している画像も削除してくれる。