ruby on rails - Cómo comprobar previamente las casillas de verificación en formtastic
ruby-on-rails (4)
Tengo un formulario que estoy tratando de configurar ... Los usuarios pueden tener muchas publicaciones, y cada publicación puede tener mucha gente mirándola.
El modelo de reloj se configura de forma polimórfica como "visible" para que se pueda aplicar a diferentes tipos de modelos. Tiene un user_id, watchable_id, watchable_type y timestamps como atributos / campos.
Esto es válido para que cuando las personas comenten en una publicación, los usuarios que la vean puedan recibir un correo electrónico al respecto.
Lo que estoy tratando de hacer es mostrar al usuario una lista de usuarios que pueden etiquetar en cada publicación, lo cual no es un problema. Esto es lo que estoy usando ahora
<% 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 %>
El problema con esto, es que cuando va a editar una actualización / publicación ... todas las casillas de verificación están preseleccionadas ... Quiero verificar previamente solo a los usuarios que actualmente están viendo la publicación.
Para aclarar aún más ... esta es la forma en que lo hago para que haga lo que quiero ahora.
<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>
donde @watches es solo una serie de identificadores de usuario
@watches = @update.watches.map{|watcher| watcher.user_id}
Establezca el valor del atributo booleano en ''verdadero'' en el controlador antes de que genere el formulario. Eso debería hacer que Formtastic por defecto marque la casilla de verificación.
Para casillas de verificación múltiples, de esta manera:
<%= f.input :tags, :as => :check_boxes, :collection => some_map.collect { |c| [c[:name], c[:id], {:checked=> tag_ids.include?(c[:id])}] } %>
Para cualquier otra persona que tenga el mismo problema:
<%= f.input :some_input, :as => :boolean, :input_html => { :checked => ''checked'' } %>
Si necesita que el estado de la casilla de verificación refleje el valor de: some_input
<%= form.input :some_input, :as => :boolean, :input_html => { :checked => :some_input? } %>
En tu modelo ..
def some_input?
self.some_input ? true : false
end