acts_as_attachment

をそのまんま参考にacts_as_attachmentを使ってみる。

./script/plugin source http://svn.techno-weenie.net/projects/plugins
./script/plugin install acts_as_attachment
./script/generate attachment_model photo

db/scheme.rbはこんな感じ(db使用なのでdb_file_idあり)。

  create_table "photos", :force => true do |t|
    t.column "content_type", :string
    t.column "filename",     :string
    t.column "size",         :integer
    t.column "parent_id",    :integer
    t.column "thumbnail",    :string
    t.column "width",        :integer
    t.column "height",       :integer
    t.column "db_file_id",   :integer
    t.column "datetime",     :datetime
  end

controllerはこんな感じ

  def create
    @photo = Photo.new(params[:photo])
    @photo.user_id = session[:user]
    if @photo.save
      flash[:notice] = '新しい写真が追加されました'
      redirect_to :action => 'list'
    else
      render :action => 'new'
    end
  end

viewはこんな感じ

=== new.rhtml ===
<h1>新しい写真</h1>

<% form_tag({:action =>'create'}, {:name=>'album', :multipart => true}) do %>
  <%= render :partial => 'form' %>
  <%= submit_tag "登録" %>
<% end %>
<br/>
<%= link_to '戻る', :action => 'list' %>

=== _form.rhtml ===
画像ファイルの選択
<%= file_field :photo, :uploaded_data %>