2010-04-29 49 views
14

我有一個表格,我正嘗試設置... 用戶可以有很多帖子,每個帖子可以有很多人在看。如何預先檢查formtastic中的複選框

Watch模型被設置爲多變性的'watchable',因此它可以應用於不同類型的模型。它具有user_id,watchable_id,watchable_type和時間戳作爲屬性/字段。

這很簡單,以至於當人們對帖子發表評論時,觀看該帖子的用戶可以收到關於該帖子的電子郵件。

我想要做的是向用戶顯示他們可以在每個帖子上標記的用戶列表,這不是問題。這是我現在使用

http://pastie.org/940421

<% semantic_form_for @update do |f| %> 
     <%= f.input :subject, :input_html => { :class => 'short' } %> 
     <%= f.input :site, :include_blank => false, :input_html => { :class => 'short' } %> 
     <label>Tag Users (they will get notified of this update)</label> 
     <%= f.input :user, :as => :check_boxes, :label => '&nbsp;', :wrapper_html => { :class => "radiolist clearfix" }, :for => :watch, :name => "Watch" %> 

     <%= f.input :note, :label => 'Update'%> 
     <% f.buttons do %> 
     <%= f.commit_button :button_html => { :class => 'submit' } %> 
     <% end %> 
    <% end %> 

這樣做的問題是什麼,就是當你去編輯更新/後...所有的複選框被prechecked ...我想它僅預先檢查當前正在觀看該帖子的用戶。

爲了進一步澄清...這是我得到它做什麼,我想現在

<ul class="radiolist clearfix"> 
<% @users.each do |user| %> 
    <li> 
    <%= check_box_tag 'user_ids[]', user.id, @watches.include?(user.id) ? true : false -%> 
    <%= h user.name -%> 
    </li> 
<% end %> 
</ul> 

其中@watches的哈克的方式僅僅是用戶ID數組

@watches = @update.watches.map{|watcher| watcher.user_id} 
+2

pastie.org不工作。你能把代碼放在別的地方嗎? – kikito 2010-04-29 08:00:49

+0

完成。感謝您看看它。 – concept47 2010-04-29 09:37:58

回答

18

爲別人有同樣的問題:

<%= f.input :some_input, :as => :boolean, :input_html => { :checked => 'checked' } %> 
+0

這也適用於 ':as =>:check_boxes' 如果你想要檢查所有的複選框 – oskarae 2011-07-14 12:31:35

+3

也可以這麼說:input_html => {:checked => true} – TLK 2011-12-20 20:57:32

2

在渲染表單之前,在控制器中將布爾屬性的值設置爲'true'。這應該使Formtastic默認複選框'檢查'。

2

如果您需要複選框的狀態,以反映的價值:some_input

<%= form.input :some_input, :as => :boolean, :input_html => { :checked => :some_input? } %> 

在你的模型..

def some_input? 
    self.some_input ? true : false 
end 
+0

這對我沒有用。它將':some_input?'視爲真理(因爲它不是'nil'或'false')。 – 2013-12-10 19:54:27

+0

這對我來說使用semantic_form_for – 2014-07-24 09:56:00

3

對於多個複選框,這種方式:

<%= f.input :tags, :as => :check_boxes, :collection => some_map.collect { |c| [c[:name], c[:id], {:checked=> tag_ids.include?(c[:id])}] } %> 
相關問題