バリデーション(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 でその内容が表示される。