Как предварительно проверить флажки в Formtastic - PullRequest
16 голосов
/ 29 апреля 2010

У меня есть форма, которую я пытаюсь настроить ... У пользователей может быть много сообщений, и у каждого сообщения может быть много людей, наблюдающих это.

Модель часов настроена полиморфно как «смотрибельная», поэтому она может применяться к различным типам моделей. У него есть user_id, watchable_id, watchable_type и timestamps в качестве атрибутов / полей.

Это так просто, что когда люди комментируют сообщение, пользователи, просматривающие сообщение, могут получить по электронной почте сообщение об этом.

То, что я пытаюсь сделать, это показать пользователю список пользователей, которых они могут пометить в каждом сообщении, что не является проблемой. Это то, что я сейчас использую

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 - просто массив идентификаторов пользователей

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

Ответы [ 4 ]

20 голосов
/ 19 мая 2011

Для тех, у кого такая же проблема:

<%= f.input :some_input, :as => :boolean, :input_html => { :checked => 'checked' } %>
3 голосов
/ 05 сентября 2016

Для нескольких флажков, таким образом:

<%= f.input :tags, :as => :check_boxes, :collection => some_map.collect { |c| [c[:name], c[:id], {:checked=> tag_ids.include?(c[:id])}] } %>
2 голосов
/ 08 декабря 2012

Если вам нужно, чтобы состояние флажка отражало значение: some_input

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

В вашей модели ..

def some_input?
  self.some_input ? true : false
end
2 голосов
/ 11 декабря 2010

Установите значение логического атрибута на «true» в контроллере, прежде чем визуализировать форму. Это должно сделать Formtastic по умолчанию флажок «флажок».

...