Ответ 1
Для кого-то другого, имеющего такую же проблему:
<%= f.input :some_input, :as => :boolean, :input_html => { :checked => 'checked' } %>
У меня есть форма, которую я пытаюсь настроить... У пользователей может быть много сообщений, и у каждого сообщения может быть много людей, которые смотрят его.
Модель Watch настраивается полиморфно как "наблюдаемая", поэтому она может применяться к различным типам моделей. Он имеет user_id, watchable_id, watchable_type и timestamps как атрибуты/поля.
Это так, что, когда люди комментируют сообщение, пользователи, просматривающие сообщение, могут получить электронное письмо об этом.
То, что я пытаюсь сделать, - показать пользователю список пользователей, которые они могут помечать на каждом сообщении, что не является проблемой. Это то, что я сейчас использую
<% 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 - это всего лишь массив идентификаторов пользователей
@watches = @update.watches.map{|watcher| watcher.user_id}
Для кого-то другого, имеющего такую же проблему:
<%= f.input :some_input, :as => :boolean, :input_html => { :checked => 'checked' } %>
Для нескольких флажков, таким образом:
<%= f.input :tags, :as => :check_boxes, :collection => some_map.collect { |c| [c[:name], c[:id], {:checked=> tag_ids.include?(c[:id])}] } %>
Задайте значение логического атрибута "true" в контроллере, прежде чем вы будете визуализировать форму. Это должно сделать Formtastic по умолчанию для флажка "checked".
Если вам нужно состояние флажка, чтобы отразить значение: some_input
<%= form.input :some_input, :as => :boolean, :input_html => { :checked => :some_input? } %>
В вашей модели..
def some_input?
self.some_input ? true : false
end