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

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2012/08/14 22:01:02
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:techmedia-think No.2

回答回数46ベストアンサー獲得回数13

ポイント100pt

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

ありがとうございました!

2012/08/14 22:00:32

その他の回答1件)

id:a-kuma3 No.1

回答回数4974ベストアンサー獲得回数2154

ポイント100pt

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

ありがとうございました!

2012/08/14 22:00:14
id:techmedia-think No.2

回答回数46ベストアンサー獲得回数13ここでベストアンサー

ポイント100pt

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

ありがとうございました!

2012/08/14 22:00:32

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません