Question

Comment vous définissez un identifiant personnalisé lorsque vous utilisez un assistant de check_box_tag dans des rails?

J'ai une boucle qui crée un groupe de cases à cocher sur la base d'une collection:

- subject.syllabus_references.each do |sr|
      = check_box_tag 'question[syllabus_reference]', sr.id, :id => sr.id
      = label_tag sr.id, sr.name

Je voudrais définir un identifiant personnalisé de sorte que mon étiquette pour la case à cocher fonctionne correctement mais je ne peux pas sembler comprendre comment (: id => sr.id ne fonctionne pas ...).

Le problème peut aussi être la façon dont je l'ai défini l'étiquette, donc si je peux obtenir que faire référence à la case à cocher correcte sans définir un identifiant personnalisé alors ce serait bien aussi ...

Était-ce utile?

La solution

je dans mon application pour créer des étiquettes de cases à cocher de la collection et de présenter un tableau d'entre eux:

<% @cursos.each do |c| %>
  <span class='select_curso'>
    <%= check_box_tag "vaga[curso_ids][]",
      c.id, (checked = true if form.object.curso_ids.include?(c.id)) %>
    <%= label_tag "vaga[curso_ids][][#{c.id}]", c.nome %>
  </span>
<% end %>

Donc params, j'ai un tableau "curso_ids" => [ "1", "3", "5"] au lieu d'une chaîne "curso_ids" => "5 « . Si vous voulez retourner une seule valeur, utilisez pour retourner un tableau Vaga [curso_id] , sinon utiliser Vaga [curso_ids] [] .

Autres conseils

Si vous donnez la case à cocher un paramètre supplémentaire, il fonctionnera:

= check_box_tag 'question[syllabus_reference]', 1, nil, :id => sr.id

@Ganesh, dans votre solution le hachage params résultant a la forme suivante:

params[:question][:syllabus_reference] = {1 => 1, 2 => 2, 3 => 3, ...}

Ceux-ci devraient travailler mieux pour vous:

check_box_tag "question[syllabus_reference][]", sr.id, checked, {:id => "question_syllabus_reference_#{sr.id}"

Remarquez le troisième paramètre (vérifié) est nécessaire pour que cela fonctionne. Le tableau params résultant sera

params[:question][:syllabus_reference] = {1, 2, 3, ...}

Pense que j'ai tout compris ...

- subject.syllabus_references.each do |sr|
  = check_box_tag "question[syllabus_reference][#{sr.id}]", sr.id
  = label_tag "question[syllabus_reference][#{sr.id}]", sr.name

Cela fonctionne, mais si vous avez une meilleure façon me le faire savoir!

Cela a été très utile et a ma recherche jours-longues à la fin. La plupart de ce que j'avais trouvé jusqu'à maintenant la syntaxe contenue et des paramètres supplémentaires qui soit des rails ou ignorés complètement marqués. Tout ce que je veux faire est de passer un tableau de mon point de vue de mon contrôleur et utiliser des cases à cocher pour indiquer au contrôleur les éléments du tableau à traiter. Je suis en mesure de réduire ce qui précède encore plus loin, à:

<%= check_box_tag "c[]", c.id %>

où c vient de ma base de données:

<%= @objects.each do |c| %>

Bien sûr, passe un tableau de ids d'objet à mon contrôleur se rapportant uniquement aux entrées contrôlées (entrées sont désactivées par défaut depuis mon départ le : paramètre false , qui, par la façon produit le même résultat :. true ), qui est presque tout ce que je besoin

Maintenant, je dois juste passer un indicateur de type d'objet - même juste une chaîne littérale fera bien - pour que le contrôleur sait quel type d'objet il est de traiter sans mon devoir augmenter mon modèle avec une colonne supplémentaire. Je vais commencer en ce moment et après ma solution, mais s'il vous plaît laissez-moi savoir s'il y a un moyen rapide et facile de le faire si vous connaissez déjà.

échantillon HAML

Disons que vous avez un objet print quelque part avec un attribut framed, vous devez afficher une liste de prints donc dans la boucle, vous allez créer un row personnalisé et column avec identifiant unique sur chaque checkbox pour la mise à jour framed

.input.row.collapse
  = check_box_tag :framed, print.framed, nil, { id: "framed_#{print.id}" }

Leito,

Juste pour fermer la boucle, je renonçai de passer un indicateur de type d'objet à travers check_box_tag . Chaque paramètre I ajouté à la syntaxe indiquée dans mon dernier post ci-dessus (ci-dessous ??) simplement provoqué l'état de case à cocher par défaut à coché plutôt que décochée , sans passer des données supplémentaires au contrôleur.

Tout en restant attentif aux solutions alternatives comme elles se présentent, pour l'instant j'intégrer le type d'objet dans le submit_tag valeur. Cela correspond la fonctionnalité à l'écran, depuis le submit_tag valeur est ce qui est montré à l'utilisateur sur le bouton d'envoi, mais il pourrait faire valoir que cette clarté des forces dans la vue même qu'il fournit nécessaire homonymie au contrôleur.

jour d'apprentissage par jour ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top