目次
●事前準備
●概要
●サンプルのポイント
●サンプルの使い方
●ファイル構成
●ビュー(画面)
●モデル(ActiveForm)
●コントローラー
内容
事前準備
プラグインの準備
「Ruby on Railsのチュートリアルの前準備」を参考にして、Eclipseプロジェクトを作成して下さい。
色々なプラグインの「4 アクティブフォーム(ActiveForm)」をインストールして下さい(既にされていれば、再インストール必要はありません)。
概要
足し算を行うアプリケーションです。
入力画面(index.html.erb)

↓
結果画面(index.html.erb)

サンプルのポイント
・データベース(ActiveRecord)を使用しない場合に、ActionFormを使用してバリデーションを行います。
サンプルの使い方
サンプルはあらかじめ用意していないので、以降の項目を参照にして、自分で作成しなければいけません。作成後に、ブラウザからhttp://127.0.0.1:3000/addにアクセスしましょう(ポート番号"3000"は適宜、環境に応じて読み替えて下さい)。
ファイル構成
本項で作成するファイル
ファイル名 | 種類 |
index.html.erb | ビュー |
add.rb | モデル |
add_controller.rb | コントローラー |
ビュー(画面)
入力画面、兼、結果画面を作成しましょう。
"ror-tutorial\app\views\add\index.html.erb"ファイルを以下の内容で作成します。
<html>
<head>
<title>Tutorial: Add</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<%= stylesheet_link_tag 'ror' %>
</head>
<body>
<h2>Tutorial: Add</h2>
<%# バリデーションエラーがある場合はメッセージが表示されます%>
<%= error_messages_for 'add' %>
<%# /add/calculateにサブミットします%>
<% form_tag :action => 'calculate' do %>
<%# addオブジェクトのarg1プロパティに対応します%>
<%= text_field(:add, :arg1) %> +
<%= text_field(:add, :arg2) %>
=<%=h @result %><br />
<%= submit_tag "サブミット" %>
<% end %>
</body>
</html>
モデル(ActiveForm)
ActiveFormを継承したモデルを作成します。リクエストパラメータのバリデーションに使用します。
"ror-tutorial\app\models\add.rb"ファイルを以下の内容で作成します。
class Add < ActiveForm
attr_accessor :arg1, :arg2
validates_presence_of :arg1, :arg2, :message => "を入力して下さい"
end
コントローラー
"ror-tutorial\app\controllers\add_controller.rb"ファイルを以下の内容で作成します。
class AddController < ApplicationController
#入力画面表示
def index
render :action => 'index.html.erb'
end
#結果画面表示
def calculate
#リクエストデータをモデル(ActiveForm)にコピーします。
@add = Add.new(params[:add])
#入力値が正常の場合は、計算を行う。
@result = @add.arg1.to_i + @add.arg2.to_i if @add.valid?
render :action => 'index.html.erb'
end
end
Rails の勉強をはじめたばかりで参考にさせてもらっています。
Rails 2.3.2 を使っているのですが、
何も値を入れずに「サブミット」を押すと
undefined method `self_and_descendants_from_active_record' for Add:Class
のエラーが出てしまいます。
どのようにしたら必須チェックが入るのでしょうか。