file_column を使ってファイルを保存する
file_column プラグインと言えば、普通はファイルのアップロードに使うもの。しかし、実際には既存のファイルを新システムに移行させるときなどに、ローカルにあるファイルをデータベースに登録したいときがある。
たとえば、Entry モデルに image という属性があったとする。これを file_column 指定してファイル名を保存できるようにする。
class Entry < ActiveRecord::Base file_column :image end
普通は、次のようなフォームを作ってファイルをアップロードする。
<% form_tag({:action => 'create'}, :multipart => true) do %> <%= file_column_field 'entry', 'image' %></p> <% end %>
このフォームの代わりに次のようなコードにしてもよい。
e = Entry.find(:first) File.open(image_file_path) do |f| e.image = f e.save end
ポイントは e.image = f のように、ファイル用カラムに File オブジェクトを代入すること。あとはアップロードとまったく同じように処理してくれる。まったく便利だ。