Paperclip このエントリーをはてなブックマークに追加

提供:Asterisk Works Wiki
移動: 案内, 検索

paperclipはRailsのプラグインで、データに画像などの添付ファイルがある場合にそのハンドリングに役立つ。

例えば、画像をアップロードすると、ルールに従った場所(ファイルシステム)に保存し、サムネールなどサイズ変更も自動的にやってくれる。

目次

ファイルの保存場所

ファイルの保存先はデフォルトだと次の場所

:rails_root/public/system/:attachment/:id/:style/:filename

変更したい場合は model で宣言する has_attached_file の次の引数で指定する。

  •  :url(ブラウザ表示時のURL)
  •  :path(保存先パス)

それぞれで使える変数は:attachment、:id、:style、:filename。:attachment には画像フィールド名の複数形が入る。

ちなみに:styleには何も指定していないと original という値が入っていた。

標準外のパラメータをpathやurlの設定に使う

次の様なコードをモデルクラスに追加すると、標準外のパラメータをpathやurlの設定に使える。 また、モデルクラスではなく、config/initializersに適当なファイルを作って、このコードを記述しても良い。そうすればいちいちモデルクラスに記述する必要がなくなる

この例ではモデルが持っているuser_idを :user_id というパラメータとして取得できる様になる。

Paperclip.interpolates :user_id do |attachment, style|
   attachment.instance.user_id
end

これをpathの設定で使えば、user_id毎にアップロードファイルを保管できる。

:path => ":rails_root/public/system/:attachment/:user_id/:style/:id.:extension"


file-uploader + Paperclip の実装をPassengerで動かすと動かない場合の対処法

valums/file-uploader - GitHubとPaperclipを使うとドラックドロップでファイルアップロード可能なアプリケーションが楽に実装できる。 実装の方法は次のサイトが参考になる。 [Rails3 ドラッグ&ドロップでファイルアップロード | KRAY Inc]

開発環境ではwebbrickを使うこと多いがこの環境では動作するのに、本番環境にPassengerを使う場合、リクエストからのデータの取り出しを次のように変更しないと動かない。

file = request.body
file = StringIO.new(request.body.read)

参考: rails ajax file upload and nginx - Programmers Goodies


動画サムネールを作る

独自のprocsesserを実装し、動画の場合にはそちらで処理するように設定する。

具体的な方法は次のサイトが参考になる。

次のサイトが参考になる just

個人用ツール
名前空間
変種
操作
案内
主なカテゴリ
ツールボックス