ユーザ用ツール

サイト用ツール


rails:action_view

ActionView

ビューで使えるヘルパーメソッド

truncate

truncateは、30文字をこえた文字列では、前27文字に … を付けて返すメソッド。30文字以下のときは何もしない。なんと多バイト文字にも対応している。

cycle

cycleは、リストを縞々にしたい時など、一行おきにhtmlのクラスを変える用途で使える便利メソッド

Form の selectボックスの作り方

セレクトボックスの項目を作るためには、配列、ハッシュ、配列の配列が使える

<% 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 %>
<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>

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テーブルの一覧をセレクトボックスとする場合は、以下のようにする。

<% form_for(@model) do |f| %>
<%= f.select :attr4, Hoge.all.map{ |hoge| [ hoge.name, hoge.id ] } %>
<% end %>

または、collection_selectを使ってプロパティを名前で指定できる

<% form_for(@model) do |f| %>
<%= f.collection_select :attr4, Hoge.all, :id, :name %>
<% end %>

配列で値を送信する

同じ名前で複数の値をsubmitする(fugas[]=1&fugas[]=2 のようなパラメータを送信したい)場合の方法。例えば、HogeとFugaが1対多、または多対多の関連で、チェックボックスをオンにしたら関連を作成する場合(関連先の情報は予め作成済みである)

<% 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 %>

パラメータ名を object_name[collection_names_id][] としておくと。object.update_attributes でhas_many(through)のデータの関連付けが更新される。

Rails 3

エスケープしつつ改行をbrタグに置き換え

Rails 3の場合は以下のヘルパを作成する

def br str
  html_escape(str).gsub(/\n/, "<br>").html_safe
end

Rails3のビューでは普通に出力すると自動的にエスケープされるが、html_safeで安全とマークされた文字列はエスケープされない

rails/action_view.txt · 最終更新: 2011/11/16 00:40 by nullpon