Railsで画像ファイルをアップロードする場合、file_columnというプラグインがとても使えます。
このpluginは、画像のアップロード、保存、サムネイル作成といった面倒な処理を劇的に簡略化してくれます。
データベースにファイル名を保存するカラムを追加し、
add_column :entry, :image, :string
モデルで、file_column pluginを指定します。
class Entry < ActiveRecord::Base
file_column :image
end
この場合の保存先は、
public/[model_name]/[attribute_name]/[id]/[file_name].jpg
になります。
サムネイルを作成する場合は、次のようにします。
class Entry < ActiveRecord::Base
file_column :image,
:magick => {
:versions => {
:thumb => "50x50",
:midle => "100x100",
:large => "800x600"
}
}
end
この場合はそれぞれ、
public/[model_name]/[attribute_name]/[id]/[file_name].jpg
public/[model_name]/[attribute_name]/[id]/thumb/[file_name].jpg
public/[model_name]/[attribute_name]/[id]/midle/[file_name].jpg
public/[model_name]/[attribute_name]/[id]/large/[file_name].jpg
に保存されます。
ファイルをアップロードするには以下のhelperを使用します。
<%= file_column_field "entry", "image" %>
アップロードした画像を表示するには、以下のhelperを使用します。
<%= url_for_file_column "entry", "image" %>
サムネイルを表示するには、
<%= url_for_file_column "entry", "image", "thumb" %>
上記のように簡単に、非常に簡単に画像処理を扱えるようになるわけですが、capistranoでデプロイしている場合、画像の保存先がデフォルトのままだと、デプロイするたびに画像ファイルをコピーしなければなりません。
これではあんまりですが、ちゃんと回避策がありました。
file_columnのオプションに、root_pathというのがありまして、デフォルトの保存先を変更できます。
以下のように、capistranoが自動でリンクしてくれるsystemディレクトリに画像を保存するように指定すれば、いちいちコピーしなくてもよさそうです。
class Entry < ActiveRecord::Base
file_column :image,
:magick => {
:versions => {
:thumb => "50x50",
:midle => "100x100",
:large => "800x600"
}
},
:web_root => "system/files/",
:root_path => File.join(RAILS_ROOT, "public", "system", "files")
end
0 件のコメント:
コメントを投稿