Let's assume an model class named Entry, where we want to define the “image” column as a “file_upload” column.

class Entry < ActiveRecord::Base

file_column :image


  • every entry can have one uploaded file, the filename will be stored in the “image” column

  • files will be stored in “public/entry/image/<entry.id>/filename.ext”

  • Newly uploaded files will be stored in “public/entry/tmp/<random>/filename.ext” so that they can be reused in form redisplays (due to validation etc.)

  • in a view, “<%= file_column_field 'entry', 'image' %> will create a file upload field as well as a hidden field to recover files uploaded before in a case of a form redisplay

  • in a view, “<%= url_for_file_column 'entry', 'image' %> will create an URL to access the uploaded file. Note that you need an Entry object in the instance variable @entry for this to work.

  • easy integration with RMagick to resize images and/or create thumb-nails.


Just drop the whole directory into your application's “vendor/plugins” directory. Starting with version 1.0rc of rails, it will be automatically picked for you by rails plugin mechanism.


Please look at the rdoc-generated documentation in the “doc” directory.


There are extensive unittests in the “test” directory. Currently, only MySQL is supported, but you should be able to easily fix this by looking at “connection.rb”. You have to create a database for the tests and put the connection information into “connection.rb”. The schema for MySQL can be found in “test/fixtures/mysql.sql”.

You can run the tests by starting the “*_test.rb” in the directory “test”


Bug reports (as well as patches) and feedback are very welcome. Please send it to [email protected]