バリデーション(4)

ActiveFormでのバリデーション。Rails 2.0でも使えそう。試しに作ったコントローラはこんな感じ。

class Sample < ActiveForm
  # フィールドごとにアクセッサを定義
  attr_accessor :name, :value
  # nameフィールドを必須とする場合
  validates_presence_of(:name, :message => "was invlalid!")
end

class MainController < ApplicationController
  def index
    @sample = Sample.new # 最初は空欄とする
  end
  
  def create
    @sample = Sample.new(params[:sample]) # ポストされた値をセットする
    if @sample.valid?
      #
      # ここに独自処理を定義する
      #
      redirect_to(:action => "index")
    else
      # エラーの場合は、index用のビューでrenderする。
      # ポストされた値が@sampleに入ってるので、フォームに再び表示される。
      render(:action => "index")
    end
  end
end

ビューとして index.html.erb をこんな感じにする。

<%= error_messages_for :sample %>
<% form_for(@sample, :url => {:action => 'create'}) do |f| %>
<table>
<tr>
	<td>Name:</td><td><%= f.text_field :name %></td>
</tr>
<tr>
	<td>Value:</td><td><%= f.text_field :value %></td>
</tr>
</table>
<%= f.submit %>
<% end %>

エラーがあった場合は、error_messages_for :sample でその内容が表示される。