複数のアクションで使用するAlFormオブジェクトの生成を行っています。
Aloneではビューでのフォームの描画やコントローラでのフォームデータの受け取りのためにAlFormオブジェクトを使用します。本サンプルでは複数のアクションで同じフォームを利用するので、AlControllerオブジェクト生成時に必ず実行されるinitializeメソッド内でAlFormオブジェクトを生成しインスタンス変数@formに格納しています。これにより、本プログラム実行中は常に@formでAlFormオブジェクトが参照できます。
フォームの取扱の詳細についてはメールフォームサンプルの解説をご覧ください。
URLにアクション名を指定しなかったときに使用されるデフォルトアクションです。登録ユーザーの一覧表示を行います。
メソッド内部では、パスワードファイルからユーザーの一覧を読み込んでインスタンス変数@usersにセットし、テンプレートv_index.rhtmlを処理しています。
新規登録画面を表示します。
指定されたユーザーの編集画面を表示します。
画面表示に先立ち編集対象のユーザーの情報が必要なので、AlForm#fetch_requestを呼び出しています。このアクションではユーザー名(username)のみ使用するので、AlForm#validateメソッドではフォームを構成するウィジェットの名前を指定して、usernameに対応するウィジェットのバリデーションのみを行っています。引数を指定せずにAlForm#validateを呼び出すと他のウィジェットの必須入力項目のチェックなどが行われてしまいますので、本サンプルは正常に動作しません。
ユーザーの新規登録または編集画面から共通して呼び出されるアクションで、送信されたフォームの内容に従ってパスワードファイルの更新を行います。
AlForm#fetch_requestとAlForm#validateを呼び出してフォームの値の取得・バリデーションを行います。なんらかのエラーが発生したらテンプレートv_form.rhtmlを処理し、再度フォームを表示します。エラーがなければパスワードファイルの更新を実施し、テンプレートv_commit.rhtmlを処理して更新完了画面を表示します。
削除の確認画面を表示します。
削除を実行します。
AloneにはAlFormオブジェクトとそれに関連づけれらたAlWidgetオブジェクトを参照して自動的にHTMLフォームを表示する機能があります。本サンプルでもこの機能を利用しており、ビューを簡潔に記述しています。
v_form.rhtmlの内容を以下に示します。AlForm#get_messages_by_htmlはフォームのバリデーションでエラーが発生した場合にエラーの一覧をHTMLで返します。AlForm#make_tiny_formはAlFormオブジェクトに関連づけられたAlWidgetオブジェクトを参照して自動的にフォームのHTMLを返します。
header_secion, body_section, footer_sectionなど定型的なHTMLを出力するメソッドを併用することにより、きわめて短い行数でビューを記述することができます。
<%= header_section %> <title>htpasswd: 登録/編集</title> <%= body_section %> <div class="al-page-header">ユーザ新規登録/変更</div> <%= @form.get_messages_by_html() %> <%= @form.make_tiny_form() %> <%= footer_section %>