代码之家  ›  专栏  ›  技术社区  ›  concept47

如何在formtastic中预先选中复选框

  •  16
  • concept47  · 技术社区  · 14 年前

    我有一个表格,我想建立… 用户可以有很多帖子,每个帖子都可以有很多人观看。

    watch模型被多态地设置为“watchable”,因此它可以应用于不同类型的模型。它有一个用户id、可观察id、可观察类型和时间戳作为属性/字段。

    这是庄严的,这样当人们评论一篇文章时,看文章的用户可以收到一封关于它的电子邮件。

    我要做的是向用户显示一个用户列表,他们可以在每个帖子上标记,这不是问题。这就是我现在用的

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

    问题是,当你去编辑更新/帖子时…所有的复选框都是预先检查过的…我希望它只预先检查当前正在看帖子的用户。

    进一步澄清…这就是我现在让它做我想做的事的老套方法

    <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}
    
    4 回复  |  直到 8 年前
        1
  •  20
  •   franzlorenzon    10 年前

    对于其他有同样问题的人:

    <%= f.input :some_input, :as => :boolean, :input_html => { :checked => 'checked' } %>
    
        2
  •  3
  •   Shiva    8 年前

    对于多个复选框,如下所示:

    <%= f.input :tags, :as => :check_boxes, :collection => some_map.collect { |c| [c[:name], c[:id], {:checked=> tag_ids.include?(c[:id])}] } %>
    
        3
  •  2
  •   Fred    14 年前

    在呈现表单之前,在控制器中将布尔属性的值设置为“true”。这将使formtastic默认为复选框“checked”。

        4
  •  2
  •   daslicious    12 年前

    如果需要复选框的状态来反映:some_input的值

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

    在你的模型中…

    def some_input?
      self.some_input ? true : false
    end