Lorsqu'un utilisateur soumet sans case cochée. J'ai besoin de mon ODM (Mongoid) pour mettre à jour le dossier de manière appropriée.Aide avec les cases à cocher
Avoir un peu de mal avec:
<% Notification.all.each do |notification| %>
<li>
<%= check_box_tag 'user[notification_ids][]', notification.id, @user.notifications.include?(notification) %>
<%= label_tag notification.description %>
</li>
<% end %>
Le doc suggère que l'aide de check_box met dans une entrée cachée. Le champ masqué a le même nom et ses attributs imitent une case à cocher non cochée. Cependant, avec le code ci-dessus. Je traverse une boucle. Ce qui est légèrement différent.
J'ai essayé:
<%= check_box('user_notification_ids_', '', options = {:index => notification.id, :checked => @user.notifications.include?(notification)}, checked_value = "1", unchecked_value = "0") %>
Mais chaque fois que je soumets, je reçois: format ObjectId illégal
Ou devrais-je créer la balise cachée pour notification_ids manuellement? Quelque chose comme:
<%= hidden_field_tag 'user[notification_ids][]', '[]' %>
Vous cherchez à entendre vos commentaires
Oui, c'est comme ça que je l'ai actuellement mis en place. Le problème est lorsque l'utilisateur ne sélectionne aucune case. Rien n'est soumis avec le formulaire. Dans mon contrôleur, je pourrais avoir quelque chose comme: params [: user] = {: notification_ids => []} si params [: user] .blank? Cependant, c'est un peu plus compliqué que ça. Depuis que j'ai deux ensembles de notifications dans deux pages différentes (Page A et Page B). –
Cela signifie que si l'utilisateur a des notifications vérifiées sur la première page. Sur la deuxième page, si l'utilisateur ne sélectionne aucune case à cocher et que le formulaire est envoyé, il sera défini sur none/empty pour TOUTES les notifications. Pas seulement pour les notifications sur la page B (deuxième page), mais aussi pour les notifications sur la première page. –
Si vous avez la moitié des cases à cocher sur une page et la moitié sur l'autre et qu'ils utilisent le même nom de paramètre, alors vous avez un problème (comme vous le mentionnez). Vous devrez utiliser deux noms de paramètres différents pour qu'une page n'efface pas les sélections de case à cocher de l'autre page. Quelque chose comme params [: user] [: page1_check] et params [: user] [: page2_check], puis mappez manuellement ceux-ci aux attributs du modèle utilisateur. Votre tâche sera simple si vous mettez tout sur une seule page. – Georges