2012-09-21 22 views
3

我正在使用Rails(3.2.5與紅寶石1.9.3)和mongodb與mongoid。我想讓用戶選擇平日檢查。因此,我有散列類型字段在我的控制器:Rails字段(類型哈希)和多個複選框

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

我得到的錯誤是:

不能轉換成符號整數

任何人都可以請點我到RI ght方向? 由於提前, 斯文

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

有了這個代碼,我可以設置工作日。但它不會從數據庫中讀取它,如果我想要通過正確存儲進行編輯:Wochentage: {"mo"=>"0", "di"=>"0", "mi"=>"1", "dn"=>"0", "fr"=>"0", "sa"=>"0", "so"=>"0"}

在編輯窗體中,所有複選框都未選中。那麼如何讓複選框以正確的狀態顯示?

感謝, 小號

+0

即使你回答自己的問題,你仍然應該接受它。這將標記問題爲答案,你將被授予不錯的銅牌徽章:) – Artemix

+0

感謝您的提示,我正在尋找一種方法來標記它的答案... – McSvenster

回答

6

OK,我知道了:

<%= 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節省檢驗爲真,沒有選上,假的。當一個字段有多個複選框作爲散列時,複選框保存1表示選中,0表示未選中。