ActiveRecordの機能でテーブル項目に対してvalidationを行うことができますが、
テーブル項目として存在しない項目に対してはvalidationができません。
ActiveFormは、そのテーブル項目として存在しない項目に対してvalidationを行うことができる機能です。
1.通常のインストール(挫折)
WindowsXPの環境下でGitを導入したあと通常のインストールを試みましたが、うまくいきません。
ちなみにGitはhttp://code.google.com/p/msysgit/からダウンロードしました。
コマンド プロンプト |
D:\Rails_Project\proj000>ruby script/plugin install git://github.com/cs/active_form.git
Initialized empty Git repository in D:\Rails_Project/proj000/vendor/plugins/active_form/.git/
ここから一歩も動かず
|
2.奥の手のインストール
(1) Active_Formのダウンロード
Active_Formはhttp://github.com/cs/active_formにあるので、
ここから直接ダウンロードして来ることにしました。
cs-active_form-1ed313d.zipをダウンロードします。
(2) /vendor/plugins/配下にコピー
解凍したフォルダをactive_formにリネームして/vendor/plugins/配下にコピーします。
3.active_form.rbの修正(rails2.3以降であれば不要)
rails2.2で実行したとき下記のエラーになったときの対処です。
rails2.3では起きませんでした。
undefined method `self_and_descendents_from_active_record' for xxxxxxxx:Class
|
導入したactive_form.rbを修正します。
/vendor/plugins/active_form/lib/active_form.rb |
class ActiveForm
:
:
class <self_and_descendents_from_active_record
[self]
end def human_name(*args)
name.humanize
end
:
:
end
end
|
4.使用例
4−1.プロジェクトの生成
(1) プロジェクトAppli004を生成する
(2) 日本語環境の設定
(3) データベースの作成
4−2.モデルの生成
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/20091126075833_create_triangles.rb
|
データベーステーブルは使用しないのでマイグレーションは実行しません。
db/migrate/20091126075833_create_triangles.rbは削除します。
4−3.モデルの修正
/app/models/triangle.rb |
require 'active_form'class Triangle < ActiveForm
attr_accessor :a, :b, :c
validates_presence_of :a, :b, :c
validates_numericality_of :a, :b, :c
end
|
4−4.コントローラとビューの生成
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−5.入力ブログラムの作成
/app/views/triangle/index.html.erb |
<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>
|
4−6.面積計算プログラムの作成
/app/controllers/triangle_controller.rb |
class TriangleController < ApplicationController
def index
end def 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<=x if 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
|
4−7.結果表示のプログラム
/app/views/triangle/calculate.html.erb |
<h1>三角形の面積</h1>
<%= "#{@result}" %>
<% form_tag :action=>"index" do %>
<%= submit_tag "戻る" %>
<% end %>
|
4−8.動作確認
(1) 正しいデータの場合
(2) 誤ったデータの場合