3

Rails(3.2.5とruby 1.9.3)とmongodbとmongoidを使用しています。ユーザーに平日をチェックするオプションを提供したいと思います。したがって、コントローラーにハッシュタイプのフィールドがあります。

field :wochentage, :type => Hash, default: {  :mo => 0,
                                            :di => 0,
                                            :mi => 0,
                                            :dn => 0,
                                            :fr => 0,
                                            :sa => 0,
                                            :so => 0
                                          }

問題は、これをWebフォームで機能させることができないことです。

<% for d,v in @timetable.wochentage  %>
    <td><%= f.check_box :wochentage[d]%></td>
<% end %>

私が得るエラーは次のとおりです。

シンボルを整数に変換できません

誰かが私を正しい方向に向けてくれませんか?よろしくお願いします、スヴェン

OK、もう少し進んでください:fields_forフォームヘルパーで私は近づきました:

<%= f.fields_for :wochentage do |w| %>
      <td><%= w.check_box :mo %></td>
      <td><%= w.check_box :di %></td>
      <td><%= w.check_box(:mi, checked_value: "1", unchecked_value: "0") %></td>
      <td><%= w.check_box :dn %></td>
      <td><%= w.check_box :fr %></td>
      <td><%= w.check_box :sa %></td>
      <td><%= w.check_box :so %></td>
    <% end %>

このコードで平日を設定できます。しかし、正しく保存されていても編集したい場合は、DBから読み取れません。Wochentage: {"mo"=>"0", "di"=>"0", "mi"=>"1", "dn"=>"0", "fr"=>"0", "sa"=>"0", "so"=>"0"}

編集フォームでは、すべてのチェックボックスがオフになっています。では、チェックボックスを正しいステータスで表示するにはどうすればよいですか?

ありがとう、S

4

1 に答える 1

9

はい、分かりました:

<%= f.fields_for :wochentage do |w| %>
  <% @timetable.wochentage.each do |t,v| %>
    <td><%= w.check_box t, checked: (v == "1" ? "checked" : "") %></td>
  <% end %>
<% end %>

面白いことに、通常のcheck_boxは、チェックされたものをtrueとして保存し、チェックされていないものをfalseとして保存します。フィールドにハッシュとして複数のチェックボックスがある場合、チェックボックスはチェックされている場合は1、チェックされていない場合は0を保存します。

于 2012-09-22T13:21:12.483 に答える