web-dev-qa-db-fra.com

Dans Rails, comment gérer plusieurs cases à cocher cochées, juste divisées sur le, ou?

Curieux de savoir quelle est la méthode utilisée par Rails pour gérer la situation lorsqu'un utilisateur coche plusieurs cases à cocher (avec la même valeur de nom) et qu'il est renvoyé au contrôleur.

Comment vérifieriez-vous si plusieurs éléments ont été sélectionnés, puis divisés sur les valeurs d'ID, etc.

35
Blankman

La façon la plus simple de procéder consiste à configurer ces cases à cocher pour qu'elles deviennent un tableau.

HTML:

<input type="checkbox" name="tag_ids[]" value="1" />
<input type="checkbox" name="tag_ids[]" value="2" />
<input type="checkbox" name="tag_ids[]" value="3" />

Manette:

tag_ids = params[:tag_ids]

(Bien sûr, vous utiliseriez probablement des assistants basés sur form_for Dans la vue, et donc affecter en masse les ID de balise. Ceci est juste l'exemple le plus générique.)

56
Matchu
f.check_box :tag_ids, {multiple: true}, 1, nil

Est la bonne réponse:

Voici la raison, il existe une option "multiple: true" qui permet de placer votre entrée dans un tableau. S'il n'y a pas d'option multiple: true, cela ne sera pas autorisé.

23
FlyingV

En plus de la réponse de Chuck Callebs, j'ai réalisé qu'en envoyant une chaîne vide au lieu de nil ou false comme valeur non vérifiée, Rails comprendra pour supprimer les identifiants associés sur une action de mise à jour:

<%= f.check_box :tag_ids, {multiple: true}, tag.id, '' %>

2
Roel4811

Voici un exemple de vue et de contrôleur par exemple où plusieurs nettoyeurs peuvent être dans plusieurs villes.

<%= form_for(@cleaner) do |f| %>
  <p>
    <%= f.label :cities %><br />
    <% for city in City.all %>
      <%= check_box_tag "cleaner[city_ids][]", city.id, @cleaner.cities.include?(city) %>
      <%=h city.name %><br />
    <% end %>
  </p>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

Et dans le contrôleur

def cleaner_params
  params.require(:cleaner).permit(city_ids: [])
end

Vous pouvez trouver un didacticiel complet sur la "manière Rails" de le faire https://kolosek.com/Rails-join-table/

1
Nesha Zoric