Rails字段(类型哈希)和多个复选框

时间:2012-09-21 21:37:18

标签: ruby-on-rails checkbox

我正在使用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
                                          }

问题在于我无法在网络表单中使用它:

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

我得到的错误是:

  

无法将符号转换为整数

任何人都可以指出我正确的方向吗? 提前致谢, 斯文

好的,再远一点:使用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 %>

使用此代码我可以设置工作日。但它不会从数据库中读取它,如果我想编辑它虽然它存储正确:Wochentage: {"mo"=>"0", "di"=>"0", "mi"=>"1", "dn"=>"0", "fr"=>"0", "sa"=>"0", "so"=>"0"}

在编辑表单中,取消选中所有复选框。那么如何让复选框显示在正确的状态?

谢谢, 小号

1 个答案:

答案 0 :(得分:7)

好的,我明白了:

<%= 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表示未选中。