ユーザ用ツール

サイト用ツール


rails:action_view

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

次のリビジョン
前のリビジョン
rails:action_view [2009/11/17 06:12] – 外部編集 127.0.0.1rails:action_view [2011/11/16 00:40] (現在) – [配列で値を送信する] nullpon
行 7: 行 7:
 [[http://api.rubyonrails.org/classes/ActionView/Helpers/TextHelper.html#M001753|cycle]]は、リストを縞々にしたい時など、一行おきにhtmlのクラスを変える用途で使える便利メソッド [[http://api.rubyonrails.org/classes/ActionView/Helpers/TextHelper.html#M001753|cycle]]は、リストを縞々にしたい時など、一行おきにhtmlのクラスを変える用途で使える便利メソッド
  
 +===== Form の selectボックスの作り方 =====
 +セレクトボックスの項目を作るためには、配列、ハッシュ、配列の配列が使える
 +<code ruby>
 +<% form_for(@model) do |f| %>
 +<%= f.select :attr1, ["a", "b", "c"], { :include_blank => "選んでね" }, { :class =>  } %>
 +<%= f.select :attr2, {"a" => "1", "b" => "2", "c" => "3"} %>
 +<%= f.select :attr3, [["a", "1"], ["b", "2"], ["c", "3"]] %>
 +<% end %>
 +</code>
 +
 +<code html>
 +<form .... >
 +<select name="model[attr1]">
 +<option value="">選んでね</option>
 +<option value="a">a</option>
 +<option value="b">b</option>
 +<option value="c">c</option>
 +</select>
 +
 +<select name="model[attr2]">
 +<option value="1">a</option>
 +<option value="2">b</option>
 +<option value="3">c</option>
 +</select>
 +
 +<select name="model[attr3]">
 +<option value="1">a</option>
 +<option value="2">b</option>
 +<option value="3">c</option>
 +</select>
 +</form>
 +</code>
 +
 +optionsはArrayかHashで受け取る。
 +
 +Hashの場合、Hashのkeyがoptionのtext、HashのvalueがHTMLのvalueとなる。ハッシュのキーがvalueで、値がtextになりそうな感じだが、逆にすることで同じ値だが違うラベルのoptionを作成可能になっている。ハッシュのvalueはHTMLでもvalueと覚えておこう。
 +
 +ArrayのArrayの場合、0番目がoptionのtext、1番目がoptionのvalueとなる。
 +
 +hogesテーブルの一覧をセレクトボックスとする場合は、以下のようにする。
 +
 +<code ruby>
 +<% form_for(@model) do |f| %>
 +<%= f.select :attr4, Hoge.all.map{ |hoge| [ hoge.name, hoge.id ] } %>
 +<% end %>
 +</code>
 +
 +または、collection_selectを使ってプロパティを名前で指定できる
 +
 +<code ruby>
 +<% form_for(@model) do |f| %>
 +<%= f.collection_select :attr4, Hoge.all, :id, :name %>
 +<% end %>
 +</code>
 +
 +===== 配列で値を送信する =====
 +
 +同じ名前で複数の値をsubmitする(fugas[]=1&fugas[]=2 のようなパラメータを送信したい)場合の方法。例えば、HogeとFugaが1対多、または多対多の関連で、チェックボックスをオンにしたら関連を作成する場合(関連先の情報は予め作成済みである)
 +
 +<code ruby>
 +<% form_for(@hoge) do |f| %>
 +  <% Fuga.all.each do |fuga| %>
 +  <li><%= check_box_tag "hoge[fugas_id][]", fuga.id, @hoge.fugas.exists?(fuga), { :id => "hoge_fugas_#{fuga.id}" }%><%= fuga.name %>
 +  <% end %>
 +<% end %>
 +</code>
 +
 +パラメータ名を ''object_name[collection_names_id][]'' としておくと。''object.update_attributes'' でhas_many(through)のデータの関連付けが更新される。
 +
 +====== Rails 3 ======
 +===== エスケープしつつ改行をbrタグに置き換え =====
 +Rails 3の場合は以下のヘルパを作成する
 +
 +<code ruby>
 +def br str
 +  html_escape(str).gsub(/\n/, "<br>").html_safe
 +end
 +</code>
 +
 +Rails3のビューでは普通に出力すると自動的にエスケープされるが、html_safeで安全とマークされた文字列はエスケープされない
  
rails/action_view.1258438325.txt.gz · 最終更新: 2011/04/16 17:08 (外部編集)