capsctrldays

2006-04-26 (水) [長年日記]

[Rails] FileColumnを使ってみるよ(初級)

れしぴぶっくの『Processing Uploaded Images』の「Also See」に載っていたやつ。これはスゴス。クオリティタカス。画像のアップロードが面倒なのでRails嫌いになった人もこれで安心!(たぶん)

でも、日本国では確認画面があるのですよ(しかもセッション使わないやつ!)とか思ってたら対応してやがんの!すげー!

というわけで、やり方を見てみるよ。

テキトーなモデルを作るよ(MySQL)

 CREATE TABLE samples (
   id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
   image VARCHAR(200) NULL,
   PRIMARY KEY(id)
 )

scaffold実行

$ ./script/generate scaffold sample

モデルにオキマリフレーズを追加

class Sample
  file_column :image
end

Controller修正しまーす

confirmメソッド(確認画面)を追加しました。

class SamplesController < ApplicationController
  def index
    new
    render :action => 'new'
  end

  def show
    @sample = Sample.find(params[:id])
  end

  def new
    @sample = Sample.new(params[:sample])
  end

  def confirm
    new
  end

  def create
    @sample = Sample.new(params[:sample])
    if @sample.save
      flash[:notice] = 'Sample was successfully created.'
      redirect_to :action => 'show', :id => @sample
    else
      render :action => 'new'
    end
  end
end

new(新規画面)のView

multipartをフォームに追加するのと、 独自へるぱの file_column_field を追加した。 フォームの飛び先はconfirm。

<h1>New sample</h1>
<%= start_form_tag({:action => 'confirm'}, {:multipart => true} )%>
  <%= file_column_field 'sample', 'image' %><br/>
  <%= submit_tag "Confirm" %>
<%= end_form_tag %> 

confirm(確認画面)のView

<h1>Confirm New sample</h1>
<%= start_form_tag :action => 'create' %>
  <%= image_tag url_for_file_column('sample', 'image') %>
  <%= hidden_field 'sample', 'image_temp' %>
  <%= submit_tag "Create" %>
</form>

ここでのポインツはコレ。

<%= hidden_field 'sample', 'image_temp' %>

(しばらく悩んだのは内緒だ)

はーい、createされたので、show(詳細表示)しまーす(たむけん風)

独自へるぱでごー。

<%= image_tag url_for_file_column('sample', "image") %>

スバラシスなあ。ホホホーイ。