月曜日なので一心不乱にコード(仕事の)。
画像アップするプラグインを前に目を付けていたPaperclipに変えてみた。
file_columnと同じでファイルに画像を保存する形式。で、attachment_fuと違って専用のテーブルを作らないタイプ。
うーん、ファイルに保存方式だとcapistranoでdeployしてるとき困るんだよな~。そんでsystem以下に保存するように変えたり。
とりあえず使ってみた。
class User < ActiveRecord::Base
has_attached_file :avatar,
:styles => { :medium => "300x300>",
:thumb => "100x100>" }
end
モデルにhas_attached_fileを定義。
class AddAvatarColumnsToUser < ActiveRecord::Migration
def self.up
add_column :users, :avatar_file_name, :string
add_column :users, :avatar_content_type, :string
add_column :users, :avatar_file_size, :integer
end
(略)
end
DBは専用のじゃなくて普通にそのモデルのテーブルに上記3種を追加。
<% form_for :user, :html => { :multipart => true } do |form| %>
<%= form.file_field :avatar %>
<% end %>
アップするフォームはこんな感じ。
<%= image_tag @user.avatar.url %>
<%= image_tag @user.avatar.url(:medium) %>
<%= image_tag @user.avatar.url(:thumb) %>
画像表示もこんな風に深く考えなくてもいいようになってる。
あとImageMagickだけでRMagickが要らないっぽいです。そこは嬉しい。
で、file_columnでちょっと面倒だったファイルの保存場所関係はhas_attached_fileのオプションで結構柔軟っぽい設定ができそうでした。
:url => "/:attachment/:id/:style_:basename:extension"
:url => "http://some.other.host/stuff/:class/:id_:extension"
シンプルなところが気に入りました。使ってこ。
参照: thoughtbot: Paperclip File Attachments