file_columnプラグインでお手軽アップローダ作成
インストール
- 適当な名前でRailsアプリ作成
- ruby script/plugin install http://opensvn.csie.org/rails_file_column/plugins/file_column/trunk
- ディレクトリが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"としなきゃダメみたい。
参考
http://d.hatena.ne.jp/sweeper/20060210/1139565058
http://wiki.rubyonrails.org/rails/pages/HowToUseFileColumn
http://ishikawa-rs.blogspot.com/2007/02/filecolumn-and-capistrano.html
2007/5/24 追記
- 日本語が化ける。対策検討中。保存するファイル名の変更方法が分からん…。