2017-07-01 7 views
0

Eh bien, je suis capable de stocker avec succès les balises définies par les utilisateurs tout en enregistrant leur profil via acts_as_taggable gem. Le problème est avec l'affichage et la mise à jour. Pour l'affichage, j'ai utilisé jquery tag-it plugin.Affichage du formulaire lors de l'intégration de la gemme acts-as-taggable-on avec le plugin jquery tag-it

Maintenant, la gemme donne toutes les étiquettes comme une seule chaîne avec des espaces entre eux au formulaire tandis que le plugin les exige dans la liste ordonnée de sorte que toutes les étiquettes peuvent être affichées séparément.

Mon code de la vue:

Si je <%= f.text_field :intersted_list, class: 'form-control', id: 'intersted' %>, tous les tags qui sont récupérés sont présentés comme une seule étiquette.

Si j'utilise:

<ul id="intersted"> <% resource.intersted_list.each do |tag| %> <li><%= tag %></li> <% end %> </ul>

tous les tags sont affichés séparément. Mais, je ne suis pas en mesure de les ajouter ou de les mettre à jour car ils ne font plus partie du formulaire.

code Javascript:

$("#intersted").tagit(); 

Tous les pointeurs seront appréciés .. Merci à l'avance ..

+0

Pourriez-vous inclure le code Javascript que vous utilisez pour initialiser Tag-it? – Max

+0

@Max, merci pour la réponse. J'ai mis à jour la question avec le code javascript. –

Répondre

0

Je pense qu'il ya autre chose qui se passe avec votre code, comme je crois ce que vous avez devrait travail.

Tag-it propose plusieurs façons de créer le widget. Vous pouvez en voir un tas dans la source HTML au https://aehlke.github.io/tag-it/examples.html. Notez que la page nécessite malheureusement jQuery via un lien non-HTTPS, vous devrez donc désactiver la protection de votre navigateur contre l'inclusion de ressources HTTP sur une page HTTPS. Le moyen le plus rapide avec une seule entrée est que la valeur du champ soit une liste séparée par des virgules, telle que <input name="tags" id="singleFieldTags2" value="Apple, Orange">, puis lancez simplement le widget sans aucune option: $('#singleFieldTags2').tagit(); Ceci est le champ "Single Input Field" (2) "option sur la page d'exemple. Si vous n'obtenez pas les balises à afficher correctement avec cette option, il semble que votre ERB ne génère pas le bon HTML (bien que cela semble être le cas). Vous voudrez peut-être confirmer que Tag-it fonctionne correctement sur votre page avec du HTML statique d'une part, et que vous pouvez utiliser Ruby/ERB pour générer le champ de texte approprié avec des mots-clés séparés par des virgules (sans tag-it) de l'autre.

Votre deuxième moyen devrait également fonctionner, même si vous devez vous assurer qu'il est inclus dans un élément <form>; Tag-it va générer les <input> s pour vous, mais ils doivent être dans un formulaire afin de les soumettre.

0

Eh bien, je n'ai pas trouvé de réponse systématique à la question. Mais avec l'aide de la réponse @ Max, je suis juste venu avec un patch à la question.

J'ai juste ajouté l'attribut value au tag. à savoir

<%= f.text_field :intersted_list, class: 'form-control', id: 'intersted', value: resource.intersted_list.to_s.gsub!(' ',',') %> 

même si il est redondant de passer la balise de valeur, il a résolu ma question ..