我有一个表单,我正在尝试设置... 用户可以有很多帖子,每个帖子都可以有很多人观看。
Watch模型以多种形式设置为“可观察”,因此它可以应用于不同类型的模型。它有user_id,watchable_id,watchable_type和时间戳作为属性/字段。
这是如此,以至于当人们对帖子发表评论时,观看帖子的用户可以收到有关该帖子的电子邮件。
我要做的是向用户显示他们可以在每个帖子上标记的用户列表,这不是问题。这就是我现在正在使用的
<% 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 => ' ', :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 %>
问题在于,当您去编辑更新/发布时...所有复选框都已预先检查...我希望它只预先检查当前正在观看帖子的用户。
进一步澄清......这是我现在想做的事情的黑客方式
<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}
答案 0 :(得分:20)
对于其他有同样问题的人:
<%= f.input :some_input, :as => :boolean, :input_html => { :checked => 'checked' } %>
答案 1 :(得分:3)
对于多个复选框,这样:
<%= f.input :tags, :as => :check_boxes, :collection => some_map.collect { |c| [c[:name], c[:id], {:checked=> tag_ids.include?(c[:id])}] } %>
答案 2 :(得分:2)
在渲染表单之前,在控制器中将布尔属性的值设置为“true”。这应该使Formtastic默认为“已选中”复选框。
答案 3 :(得分:2)
如果您需要复选框的状态以反映以下值:some_input
<%= form.input :some_input, :as => :boolean, :input_html => { :checked => :some_input? } %>
在你的模特中..
def some_input?
self.some_input ? true : false
end