簡単な検索フォーム
簡単な検索フォームを作ってみたので、メモしておきます。
作成したviewのフォームの記述を以下のようのform_forヘルパーを使用して作ってみました。
<table id="search"> <% form_for (:conditions, @conditions, :url=>{:controller => '/customer/search', :action => 'result'}, :html => {:method => :get, :id => 'select' } ) do |f| %> <tr> <td> <%= f.select :limit, @limits.collect {|m| [m.name, m.value] } %> <%= f.text_field :keyword %> <%= f.submit :submit, :value=>'検索' %> </td> </tr> <% end %> </table>
form_for
-
- form_forは<%= form_for ... %>ではなく% form_for ... %>と記述します。これはブロック引数が含まれるからだとおもいます。
- form_forの1つめの引数は、Formタグの属性名です。コントローラ側でこの属性名を引数に指定してparamsメソッドを呼び出すころで、送信パラメータを取得することができます。++2つめのパラメータは、このフォームを表示するときの値を指定するための変数です。
- 3つ目以降は、オプションパラメータです。:urlで送信先のurl,:htmlでhtmlのフォームタグの指定ができます。
form_forのブロック内のタグ生成
-
- form_forのブロック内のでブロック引数をレシーバーにしたヘルパーメソッドで各フォームタグを生成します。
- 各ヘルパーメソッドは通常「 method_name( method, options = {})」のシンタックスとなります(selectなどはのぞく)
method引数には参照するめの属性名を指定。optionsにはhtmlタグの属性を指定します。
selectヘルパー
-
- selectヘルパーは「select( method, choices, options = {})」というシンタックスとなります。choicesには、選択肢となる項目のArrayを指定します。その要素も配列で、0個目に表示する名称、1個目に送信される値を指定します。
送信された値の取得
コントローラ側では、paramsメソッドで送信された値を取得できます。params['form_forのパラメータ名']という形で各フォームパラメータの値を含むHashを取得できます。Hashには各タグ生成ヘルパーで指定した属性名をキーとして値が格納されています。
今回の例では、以下のようにしてtext_filed、selectタグで入力/選択された値を取得できます。
params[:conditions][:keyword] params[:conditions][:limit]
表示時のフォーム値設定
form_forの2つめのパラメータとして指定した変数が表示対象として参照されます。この変数に各フォーム要素の属性名に対応した属性メソッドを定義しておけば、そのメソッドで取得される値がフォームの表示されます。
今回の例では、以下のように定義したモデルクラスのインスタンスをこのフォームの表示元のコントローラーで@conditionsに設定しておけばフォームの値の初期化が行えます。
class SearchConditions attr_accessor :keyword, :limit end