人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Ruby on Rails 3 の view について質問です。(DRY)
ある一覧画面の検索フォームで、チェックボックスのチェック有無をクエリの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 %>

●質問者: tono5652
●カテゴリ:インターネット
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● a-kuma3
●100ポイント

あまり、かっこいい感じではないですが、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 %>

tono5652さんのコメント
ありがとうございました!

2 ● techmedia-think
●100ポイント ベストアンサー

以下のように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)%>

tono5652さんのコメント
ありがとうございました!
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ