file_columnプラグインでお手軽アップローダ作成

インストール

  1. 適当な名前でRailsアプリ作成
  2. ruby script/plugin install http://opensvn.csie.org/rails_file_column/plugins/file_column/trunk
  3. ディレクトリがtrunkで掘られるのでfile_columnにリネーム

動作確認

コントローラとアクション、モデルとか一式のソース。

upload_controller.rb

class UploadController < ApplicationController

  def upload
    if request.post?
      Uploader.create(params[:uploader])
    end
  end

  def list
    @images = Uploader.find(:all)
  end
end

upload.rhtml

<%= debug(params) %>

<form  method="post" enctype="multipart/form-data" >
<%= file_column_field("uploader", "image1") %>
<br />
<input type="submit"name="upload" value="アップロード">
</form>

list.rhtml

<table border="1">
<tr>
<% for column in Uploader.content_columns %>
  <th><%= column.human_name %></th>
<% end %>
</tr>

<% for image in @images %>
<tr>
  <% for column in Uploader.content_columns %>
    <td><%=h image.send(column.name) %></td>
  <% end %>
  <td><%= url_for_image_column image, "image1", "600x480" %></td>
  <td><%= url_for_file_column  image, 'image1' %> </td>
  <td><%= image_tag(url_for_file_column(image, 'image1')) %> </td>
</tr>
<% end %>
</table>


uploader.rb

class Uploader < ActiveRecord::Base
  file_column :image1
end

migration.rb

class CreateUploaders < ActiveRecord::Migration
  def self.up
    create_table :uploaders do |t|
      t.column :image1, :string
      t.column :image2, :string
    end
  end

  def self.down
    drop_table :uploaders
  end
end

何も考えずにやってたらこんなエラーが出た。

Do not know how to handle a string with value 'hoge.jpg' that was passed to a file_column. Check if the form's encoding has been set to 'multipart/form-data'.

アップロードするformの属性にenctype="multipart/form-data"としなきゃダメみたい。

2007/5/24 追記

  1. 日本語が化ける。対策検討中。保存するファイル名の変更方法が分からん…。