ActiveForm
ActiveRecordの機能でテーブル項目に対してvalidationを行うことはできますが、テーブルに存在しない項目に対してはvalidationを行うことができません。ActiveFormは、そのテーブルに存在しない項目に対してvalidationができるようにする機能です。
1-1.プロジェクトの生成
(1) プロジェクトAppli002を生成する
(2) 日本語環境の設定
(3) データベースの作成
1-2.Active_Formのインストール
(1) Active_Formのダウンロード
Active_Formはhttp://github.com/cs/active_formにあるので呼び出し、
をクリックして、直接cs-active_form-baa96e4.zipを適当な場所にダウンロードします。
(2) /vendor/plugins/配下にコピー
解凍したフォルダをactive_formにリネームして/vendor/plugins/配下にコピーします。
1-3.active_form.rbの修正(rails2.3以降であれば不要)
rails2.2での実行で下記のエラーになったときの対処です。rails2.3では起きません。
class ActiveForm
:
:
class <
def self_and_descendents_from_active_record
[self]
enddef human_name(*args)
name.humanize
end
:
:
end
end
1-4.アプリケーションの作成
(1) モデルの生成
NetBeansで[生成]を選択
ジェネレータ(G): model
引数(A): triangle
今回はデータベーステーブルは使用しないのでマイグレーションは実行しません。
exists app/models/
exists test/unit/
exists test/fixtures/
create app/models/triangle.rb
create test/unit/triangle_test.rb
create test/fixtures/triangles.yml
create db/migrate
create db/migrate/20100204011655_create_triangles.rb
db/migrate/20100204011655_create_triangles.rbは削除しておきましょう。
(2) モデルの修正
require 'active_form'class Triangle < ActiveForm
attr_accessor :a, :b, :c
validates_presence_of :a, :b, :c
validates_numericality_of :a, :b, :c
end
(3) コントローラとビューの生成
NetBeansで[生成]を選択
ジェネレータ(G): controller
名前(N): triangle
ビュー(V): index calculate
exists app/controllers/
exists app/helpers/
create app/views/triangle
exists test/functional/
create test/unit/helpers/
create app/controllers/triangle_controller.rb
create test/functional/triangle_controller_test.rb
create app/helpers/triangle_helper.rb
create test/unit/helpers/triangle_helper_test.rb
create app/views/triangle/index.html.erb
create app/views/triangle/calculate.html.erb
(4) 入力ブログラムの作成
<h1>三角形の面積はどのくらいか</h1>
<div id="triangle">
<%= error_messages_for :triangle %>
<% form_tag :action=>"calculate" do %>
辺a:<%= text_field :triangle, :a %><br/><br/>
辺b:<%= text_field :triangle, :b %><br/><br/>
辺c:<%= text_field :triangle, :c %><br/><br/>
<%= submit_tag "面積計算" %>
<% end %>
</div>
(5) 面積計算プログラムの作成
class TriangleController < ApplicationController
def index
enddef calculate
@triangle = Triangle.new(params[:triangle])
if @triangle.valid?
x=@triangle.a.to_f
y=@triangle.b.to_f
z=@triangle.c.to_f
fg="ON"
fg="off" if x+y<=z
fg="off" if x+z<=y
fg="off" if y+z<=xif fg=="ON" then
s=(x+y+z)/2
area=Math.sqrt(s*(s-x)*(s-y)*(s-z))
@result = "辺の長さ #{x}, #{y}, #{z} の三角形の面積は#{area}"
else
@result = "辺の長さ #{x}, #{y}, #{z} では三角形はできない"
end
else
render :action => "index"
end
end
end
(6) 結果表示のプログラム
<h1>三角形の面積</h1><%= "#{@result}" %><% form_tag :action=>"index" do %>
<%= submit_tag "戻る" %><% end %>
1-5.動作確認
(1) 正しいデータの場合
(2) 誤ったデータの場合