ActiveForm

[4]ActiveForm
1.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では起きません。


/vendor/plugins/active_form/lib/active_form.rb
class ActiveForm


class <
def self_and_descendents_from_active_record
[self]
end

def 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) モデルの修正


/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

(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) 入力ブログラムの作成


/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>

(5) 面積計算プログラムの作成


/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

(6) 結果表示のプログラム


/app/views/triangle/calculate.html.erb

<h1>三角形の面積</h1><%= "#{@result}" %><% form_tag :action=>"index" do %>
<%= submit_tag "戻る" %><% end %>

1-5.動作確認
(1) 正しいデータの場合






(2) 誤ったデータの場合





i18nによる日本語化 | index | 認証機能