2009年6月20日土曜日

4.railsフォーム作成関数について

HPを作成してゆく際にはフォームの利用は不可避である。railsではこのフォーム部品(テキストボックスやボタンなど)を作成するための関数が定義されている。



私の知る限り、このフォーム作成部品は2種類存在する。

1.モデルと連携してフォーム部品を作成する関数。

2.モデルとは無関係にフォーム部品を作成する関数である。



モデルと連携させてフォームを記述する方法はとても記述が簡単である。そもそも、railsはMVCやファイル名、DBの関係が密接である。

どういうことかというとMVCのクラス名やファイル名、DBテーブル名などは決められたものでなければならないという決まりがある。



仮にUserというモデルを作成するとする。

ruby script\generate scaffold user name:string plan_date:date status:integer comment:text

するとrailsの命名規則により以下のようなファイル名とテーブル名、クラス名が作成される。

ファイル名
コントローラクラス名
UsersController
コントローラファイル名
users_controller.rb
テンプレートのフォルダ名
app/view/users
ヘルパーモジュール名
UsersHelper
ヘルパーファイル名
users_helper.rb
レイアウトテンプレートファイル名
Users.html.erb
機能テストファイル名
users_controller_test.rb
データベーステーブル名
users
モデルクラス名
User
モデルクラスファイル名
users.rb
単体テストファイル名
user_test.rb

このように、コントローラ名をusersとしただけでそれ以外のファイル名やクラス名、テーブル名まで決まってしまう。

一見これは応用性が無く融通の利かないように感じるかもしれないが、こうすることによって多言語ではアクションとモデルとビューおよびテーブルとの結びつきなどを一つ一つ設定していた作業を行うことなく一貫した手法でシステム構築が可能となる。


この考え方がこそが、「設定より規約」railsの基本理念の根幹だ。

私はこの考え方に痛く感動している。rubyが好きな一番大きな理由だ。

さて、話題が大分フォーム作成関数の話からそれてしまった・・・。

これからフォーム作成用関数の説明をしてゆく。

1)モデルと連携してフォームを作成する。

<% form_for(@footprint) do |f| %>
  <b>Article</b>
    <%= f.text_field :article_id %>
<b>User</b>
    <%= f.text_field :user_id %>
  <%= f.submit "Update" %>
  <% end %>

form_for(@footprint) do |f|
の部分でモデル(@footprint)からフォーム作成用インスタンス(
これをフォームビルダーオブジェクトという)を取得し end までの間でフォーム部品を出力している。



フォーム出力関数には以下のような種類がある。


text_field
<input type="text">
password_field
< input type="password">
hidden_field
< input type="hidden">
text_area
< textarea>
check_box
< input type="checkbox">
radio_button
< input type="radio">
select
< select> option配列を忘れないように
date_select
コンボボックス3つ(年、月、日)
file_field
< input type="file">


以上のメソッドを利用することで簡単にフォームを作成することができるようになる。
f.text_field :name
     ↓
<input id="user_name" name="user[name]" type="text"
  value="しあさん" />
このように、 f.text_field :name しかしていないにも拘らず自動的にモデル名も含めたname,id属性や初期値(value)を記述してくれる。

これを可能にしているのがrailsの基本設計の"設定より規定"の概念だ。

このように、モデルに関係するデータを扱う場合フォームビルダーオブジェクトを利用すると簡潔にコードを記述できる。

しかしながら、フォームの用途はモデルのデータを扱うためだけではない。そこでrailsではモデルからフォームを作成する関数以外に単純に(フォームとの連携なしに)フォームを作成するが可能なメソッドが定義されている。

モデルとは無関係にフォーム部品を作成する関数


これは次回記述します。

眠いので

0 件のコメント:

コメントを投稿

どうしようもないクズのアーチャー