Rails4 + dragonflyで画像のアップロード
Rails4 + dragonflyで画像のアップロード
dragonfly概要
特徴
- Rails3からよく使われている画像アップロード用gem
- 画像を保存する際は、画像をクロップしてから保存しておく場合と、表示するときにクロップする場合の2パターンが主に存在するが、dragonflyは後者。
- 表示するときにクロップするので、サイズが決まっていない場合は特に便利。
- cache機能を持っているので、パフォーマンスもそんなに問題はない
- 画像に関するプロパティを取得するメソッドも多数定義されているので便利
今回の目的
- 簡単に画像アップロードを実装する
作業(2.5h)
- ドキュメント閲覧(1h)
- gemのインストール(1min)
- dragonflyの設定ファイル作成(1min)
- modelの設定(2min)
- migrationファイルを作成(5min)
- viewの作成(20min)
- controllerの作成(1h)
gemのインストール
(Gemfile)
gem 'dragonfly', "~>1.0.0"
bundle install
modelの設定
class Photo < ActiveRecord::Base
dragonfly_accessor :image
end
migrationファイルを作成
- uidカラムを追加。名前は「dragonfly_accessorに指定した値」+「_uid」にしておく
- このuidカラムにはファイルのパスが入る
add_column :photos, :image_uid, :string
viewの作成
- を生成する
<% form_for(@photo, :html => {:multipart => true} do |f| %>
...
<%= f.file_field :image %>
...<% end %>
注意) Rails < 3.2: You'll need to add :html => {:multipart => true} to the form tag helper. と書いてあったが、Rails4でも:multpart => trueが必要だった
controllerの作成
- photo.imageに先ほどのファイルパラメータを指定すると、勝手にimage_uidカラムにファイルパスが入り、そのファイルパスに指定したファイルが保存される
photo = Photo.new(params[:photo])
# photo = Photo.new
# photo.image = params[:photo][:image]でもよい
photo.save
結果・感想
- 簡単に画像アップロードを実装できた
- ファイルアップロード用ボタンがあるのがダサいので、jquery uiなどを使ってやらないと、今風にはならない。。。それ用のいいライブラリはないだろうか。。。
- いろいろうまくやってくれるので、カスタマイズが難しい。