maeshimaの日記

メモ書きです

PaperClip::ClassMethods#has_attached_file

ドキュメントの意訳。

has_attached_fileはクラスにファイル用の属性を追加する。通常はどこかに置いてあるファイルか、もしくはユーザがアップロードしたファイル。その属性はPaperclip::Attachementオブジェクトを返す。これによってファイルをモデルの普通の属性として扱える。サムネイルは新しいファイルが代入されたときに作られる。しかしそれはsaveれるまでは保存されない。同じように、属性にnilが代入されただけではまだファイルは削除されない。saveされて初めて削除される。Paperclip::Attachementのドキュメントにもっと具体的に書いてある。

下記はPaperclipの振る舞いを変更できるオプション。

url

ファイルのurlを指定する。ドメインから指定しても絶対パスでもいいけど、普通は絶対パスがいい。デフォルトは "/system/:attachment/:id/:style/:filename" Paperclip::Attachment#interpolate に :style とかの詳しい情報がある。

:url => "/:class/:attachment/:id/:style_:filename"
:url => "http://some.other.host/stuff/:class/:id_:extension"

default_url

ファイルがないときに返すURL。デフォルトは"/:attachment/:style/missing.png"

styles

サムネイルのスタイルとジオメトリを設定するハッシュ。ImageMagickのウェブサイトにジオメトリの設定について載ってる。Paperclipは"#"オプション(例:"50x50#")を追加している。これは画像を指定した寸法にあてはまるようにリサイズして残りを切り取る(なるべく真ん中で)。デフォルトはサムネイル無し。

default_style

デフォルトのサムネイル用のurl。デフォルトは original

whiny

Paperclipはコマンドラインエラーのためにアップロードされたファイルのサムネイル化ができないときにエラーを発生させる。これはこの設定をオーバライドする(つまりfalseならサムネイル化できなくてもエラーにならない)。デフォルトはtrue。

convert_options

サムネイルを作る時、自由な形式でconvert時のコマンドオプションを指定できる。全てのExifデータを削除する"-strip"がよく使われる(サムネイルとアバター用にスペースを保持する)。ImageMagickのconvertのドキュメントのを見るともっと色々書いてある。このオプションはハッシュで一致するそれぞれのスタイルに適用させることが出来る。:allをキーとして設定すると、全てのサムネイルに適用することができる。オプションが変わったときに困るのでoriginalには適用させない方が良い。

has_attached_file :avatar, :styles => { :large => "300x300", :negative => "100x100" }
                           :convert_options => {
                             :all => "-strip",
                             :negative => "-negate"
                           }

まだ非推奨にはなってないけど、この方法でオプションを設定するのは推奨しない。将来の互換性のために、:convert_optionsはそれぞれの:style中に含めるのを推奨する。

convert_options中で、スペースで分けられた文字列は安全に実行されるためにshell quoteされる。もしoptionsにスペースが必要なら、配列にして:convert_optionsに渡すとよい。

strage

ファイルを保存する場所を決める。:filesystemと:s3のどちらかが選べる。デフォルトは:filesystem。詳しくはPaperclip::Storage::FilesystemとPaperclip::Storage::S3 を見るといい。