Les rails autocomplissent les étiquettes séparées par des virgules en utilisant regex

J'utilise l'ancien plugin auto_complete en conjonction avec les actes comme taggable sur gemme dans une tentative de répliquer essentiellement le comportement de marquage de Stack Overflow lui-même! Je fais plus ou moins ce que l'on décrit dans cette allumette . Pour les balises simples, cela fonctionne très bien. Cependant, j'aimerais vraiment faire en sorte que chaque fois que l'utilisateur entre dans un espace ou une virgule (tout comme sur le débordement d'empilement), l'autocomplète commencera à nouveau. J'imagine qu'il y a un moyen de le faire via regex, mais je ne sais pas trop comment appliquer ce comportement au champ text_ (j'imagine utiliser JavaScript pour "redémarrer" l'autocomplète, mais certes, je suis assez faible Quand il s'agit de JavaScript. C'est ce que ressemble à ma vue:

<%= text_field_with_auto_complete :business, :tags, {}, { :url => formatted_businesses_path(:js), :method => :get, :with => "'search=' + element.value" } %> 

Mon contrôleur est très simple, tout simplement en gardant les balises pour cette entreprise en particulier.

Si quelqu'un pouvait me pointer dans la bonne direction (car je ne suis pas sûr de savoir comment procéder), je l'apprécierais grandement.

Je sais que c'est vieux, mais pour recréer ce comportement, j'ai utilisé rails3-jquery-autocomplete avec des actes-comme-taggable-on . Ils fonctionnent très bien et facilement ensemble.

 // Model class Foo < ActiveRecord::Base acts_as_taggable_on :tags end // Controller class FoosController < ApplicationController autocomplete :tag, :name, :class_name => 'ActsAsTaggableOn::Tag' ... end // Routes resources :foos do collection do get :autocomplete_tag_name end end //View <% form_for :foo do |form| %> <%= form.label :tag_list, "Tags" %> <%= form.autocomplete_field :tag_list, autocomplete_tag_name_foos_path, :"data-delimiter" => ', ' %> <% end %> 

J'espère que cela aide quelqu'un.

Je voudrais examiner les options pour l'assistant de base de text_field_with_auto_complete . Si cela ne supporte pas ce dont vous avez besoin, je l'abandonnerais en faveur de quelque chose dont vous avez plus de contrôle. Mon expérience avec les assistants / plugins comme celui-ci est qu'ils ne vous font que gagner du temps si vous faites exactement ce qu'ils attendent de votre travail. Si vous avez besoin de quelque chose de personnalisé, vous allez avoir plus de peine à essayer de contourner les choses qu'ils ne le valent.

Pour abandonner le text_field_with_auto_complete helper, regardez le HTML et JS qu'il génère dans la page rendue. Copiez et collez-le, puis modifiez-le pour faire ce dont vous avez besoin. Vous pouvez toujours utiliser le côté contrôleur du plugin autocomplé.

Le JS que vous voudrez diviser la chaîne sur les virgules ressemblera à ceci:

 var tags = $('#myTextInput').value(); var splitTags = tags.split(/\w*,\w*/); 

JS regexen sont assez semblables à Ruby's. Ce regex se divise en virgules, en mangeant des espaces supplémentaires.