ある一覧画面の検索フォームで、チェックボックスのチェック有無をクエリの1部にしています。
検索後ページが更新された際、検索時にチェックされたボックスは checked になるように以下のコードを書いています。
<% @places.each do |pl| %>
<%= check_box('place', pl.id, {:id => "place["+pl.id.to_s+"]", :checked => params[:place].has_key?(pl.id.to_s)}, true, false)%>
<% end %>
しかし、この場合params[:place]の中身が空の場合has_key?でエラーになってしまうため、泣く泣く以下のように書いているのですが、DRY原則に反している気がします。
もう少し良い書き方はないでしょうか?
<% if params[:place]%>
<%= check_box('place', pl.id, {:id => "place["+pl.id.to_s+"]", :checked => params[:place].has_key?(pl.id.to_s)}, true, false)%>
<% else %>
<%= check_box('place', pl.id, {:id => "place["+pl.id.to_s+"]"}, true, false)%>
<% end %>
以下のようにcheckedの値を入れる際にparams[:place]の判定も一緒に加えるのでどうでしょう。
<%= check_box('place', pl.id, {:id => "place["+pl.id.to_s+"]", :checked => params[:place] && params[:place].has_key?(pl.id.to_s)}, true, false)%>
あまり、かっこいい感じではないですが、check_box のくだりを二度書きたくないのであれば、こんなのを思いつきました。
<% p = params.dup p.default= Hash.new %> <% @places.each do |pl| %> <%= check_box('place', pl.id, {:id => "place["+pl.id.to_s+"]", :checked => p[:place].has_key?(pl.id.to_s)}, true, false)%> <% end %>
ありがとうございました!
以下のようにcheckedの値を入れる際にparams[:place]の判定も一緒に加えるのでどうでしょう。
<%= check_box('place', pl.id, {:id => "place["+pl.id.to_s+"]", :checked => params[:place] && params[:place].has_key?(pl.id.to_s)}, true, false)%>
ありがとうございました!
ありがとうございました!
2012/08/14 22:00:32