2007-01-23 並び替え、フィルター、検索
フォームメソッドの微妙な言い回しに悩んだのでメモ。
フォームの開始
通信方法 メソッド 通常 form_tag url_for_options = {}, options = {}, *parameters_for_url, &block 通常 start_form_tag(form_tagと同じ) url_for_options = {}, options = {}, *parameters_for_url, &block Ajax form_remote_tag options = {}, &block form_tagで囲っておくと、returnキーが押された時にフォームの送信が実行される。(text_areaでは改行になるが)link_to_remoteやsubmit_to_remoteを利用する時に、もしform_tagで囲ったままだと、リンクやボタンを押した時にはAjax送信、returnキーを入力した時には通常のページ送信となる。(この挙動に混乱してしまったので、今後は注意)この場合、form_remote_tagを利用するか、form_tagを削除してしまうべき。
フォームの送信
通信方法 形状 メソッド 通常 ボタン submit_tag value = "Save changes", options = {} Ajax ボタン submit_to_remote name, value, options = {} Ajax リンク link_to_remote name, options = {}, html_options = {} link_to_remoteのリンクをボタンに替えたい時、単純にsubmit_to_remoteに置き換えたくなるが、そうするとエラーになる。設定値の並びに注意。submit_to_remoteの方が一つ多い。
- link_to_remote name, options
- nameがリンク文字列になる。
- submit_to_remote name, value, options
- valueがボタンに表示される文字列になる。
- submit_to_remoteのnameにはどんな意味があるのだろう?使い道がよくわからない...。
使用例
<%= link_to_remote "検索", :update => "list_update", :submit => "store", :url => {:action => 'list_update'} %><%= submit_to_remote "store", "検索", :update => "list_update", :submit => "store", :url => {:action => 'list_update'} %>
フォームの終了
通信方法 メソッド end_form_tag 通常/Ajaxにかかわらず、常にend_form_tagで閉じる。
_tagによる違い
違い メソッド データベースへの入力で利用 text_field object_name, method, options = {} 上記以外の一般的な値の取得 text_field_tag name, value = nil, options = {}
_tagなしのテキストフィールド 利用例
@software = Software.find(params[:id])
- @ softwareにデータベースからインスタンスを代入。
<%= text_field 'software', 'title' %> <%= text_field 'software', 'description' %> <%= text_field 'software', 'url' %>
- それぞれのテキストフィールドにtitle、description、url列の値が入って表示される。
- 上記フォームが送信されると、受信側ではparamsに以下の内容が代入される。
params = {:software=>{:title=>"入力されたtitle", :description=>"入力されたdescription", :url=>"入力されたurl"}}
- つまり、以下のように操作することが可能。
- params[:software] とすれば {:title=>"入力されたtitle", :description=>"入力されたdescription", :url=>"入力されたurl"} を取得
- params[:software][:title] とすれば "入力されたtitle" を取得
Software.new(params[:software])
- よって、params[:software]一回で、title、description、urlの値を取得できる。(つまり、params[:software]が展開されると以下と同等だ。)
- Software.new(:title=>"入力されたtitle", :description=>"入力されたdescription", :url=>"入力されたurl")
_tag付きのテキストフィールド利用例
<%= text_field_tag("search", @search_word) %>
- 検索ワードなどを入力する場合に利用。(データベースへの書き込みをしない値の入力で利用)
- 上記フォームが送信されると、受信側ではparamsに以下の内容が代入される。
params = {:search=>"入力されたsearch"}
@search_word = params[:search]
- フォームからのパラメーターは、params[:search]で取得。
- 再び@search_wordに代入してtext_field_tagを描画すれば、検索ワードは保持される。
form_for関連
通信方法 メソッド 通常 form_for object_name, *args, &proc 通常 fields_for object_name, *args {|builder.new(object_name, object, self, options, block)| ...} Ajax remote_form_for object_name, *args, &proc Ajax form_remote_for(remote_form_forと同じ) object_name, *args, &proc form_forの利用例
実際に使ったことはないが、form_forブロックの中では、先頭のform_forタグの中で宣言したことを省略できるらしい。
<% form_for :software, @software, :url => { :action => "create" } do |f| %> <%= f.text_field :title %> <%= f.text_area :description %> <%= f.text_field :url %> <% end %>通常のscaffoldで生成されるコードは以下のようになる。'software'を繰り返している。これだけではありがた味は感じないが、複数オプションを設定しても、form_forなら常にf.text_fieldだけで済んでしまう。
<%= start_form_tag :action => "create" %> <%= text_field 'software', 'title' %> <%= text_area 'software', 'description' %> <%= text_field 'software', 'url' %> <%= end_form_tag %>
トラックバック - http://d.hatena.ne.jp/zariganitosh/20070123/1169537414
リンク元
- 1187 http://gdgdlog.net/log/show/34
- 414 http://www.google.co.jp/search?q=submit_to_remote&lr=lang_ja&ie=utf-8&oe=utf-8&rls=org.mozilla:ja-JP-mac:official&client=firefox
- 190 http://www.google.co.jp/search?hl=ja&client=firefox-a&rls=org.mozilla:en-US:unofficial&hs=E5E&q=submit_to_remote&btnG=検索&lr=lang_ja
- 169 http://nikeplus.nike.com/nikeplus/v1/swf/scrapablewidget/rundetail.swf
- 151 http://www.google.co.jp/search?q=submit_to_remote&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&client=firefox-a
- 123 http://www.google.co.jp/search?q=submit_to_remote&sourceid=navclient-ff&ie=UTF-8&rlz=1B2GGGL_jaJP205JP205
- 94 http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&rls=GGLJ,GGLJ:2006-44,GGLJ:ja&q=ruby+on+rails+KCODE
- 72 http://www.google.co.jp/search?hl=ja&source=hp&q=submit_to_remote+rails&lr=&aq=1&oq=submit_to_remote
- 46 http://www.google.co.jp/search?hl=ja&lr=lang_ja&client=firefox-a&rls=org.mozilla:ja:official&hs=RqP&q=rails+submit_to_remote&suggest=0&sa=X&oi=cjkrefinements&resnum=0&ct=result&cd=1
- 42 http://www.google.co.jp/search?q=form_for&lr=lang_ja&ie=utf-8&oe=utf-8&rls=org.mozilla:ja:official&client=firefox