5

Ich hätte gerne eine Auswahl von Dropdown-Tags, wo ich mehrere vorhandene Tags auswählen und neue hinzufügen könnte.Rails fungiert als Taggable-on mit select2 (und simple_form)

Ich habe viele verschiedene Möglichkeiten ausprobiert und ich entweder nicht select2 Box arbeiten oder nur einen Wert übergeben (letzte).

Dies ist die am nächsten ich bekam (passes letzten Wert):

<%= f.input :tag_list, collection: @model.tags.map { |t| t.name }, input_html: { :style=> 'width: 300px', class: "taggable", data: { placeholder: "Tags" }} %> 

Antwort

3

Wie ich schon erwähnt, jetzt normal select2 Bibliothek verwendet nur Input-Typen auswählen, aber es mit Eingabetypen funktioniert, wenn select2-full-Bibliothek.

Also, das war ein Ausweg aus einem Problem.

Noch hatte ich Probleme mit nur einem einzigen Wert. Ich habe tatsächlich Code aus einem der Beispiele kopiert/eingefügt und es war falsch. Es wurde festgestellt, dass starke Parameter enthalten sollten: tag_list, was offensichtlich ist, aber es ist tatsächlich {tag_list []}, die benötigt wurde, um alle Werte zu akzeptieren.

Funktioniert jetzt wie ein Charme.

+0

Ihr Punkt über tag_list [] war entscheidend für mich - Tags werden als ein Array von Strings wie ["a", "b", "c"], nicht eine einzige Zeichenfolge wie "a, b, c" eingereicht –

1

Versuchen Sie dieses, hoffen, dass dies für Sie arbeiten.

= f.input :tag_list, class: "taggable",data: {options: @model.tags.map { |t| t.name }} 

$(".taggable").select2(
    tags: $('.taggable').data('options') 
    width: "252px" 
); 
+0

Leider hilft es nicht. Es scheint, dass es sich um eine Art von Eingabe handelt. Also habe ich als:: select hinzugefügt, ansonsten ist es nur ein normales Eingabefeld. Auf diese Weise bekomme ich jetzt ein Dropdown, aber mit Ja und Nein Optionen, nicht mit meinen Tags. Darüber hinaus ist es keine Mehrfachauswahl. –

+0

lassen Sie mich darüber nachdenken. –

2

Für mich ist diese Arbeit:

Kaffee Skript:

$(".tags").select2 
    theme: "bootstrap", 
    tags: true 
    tokenSeparators: [','] 

und in der Ansicht:

= f.input :tag_list, input_html: { class: 'tags', multiple: "multiple" }, collection: @video.tag_list 

Wesentlicher Teil ist mehrere: "multiple"

Und Natürlich, wie Mitja sagte, vergiss nicht {tag_li zu setzen st: []} zu Ihrem Controller starke Parameter.

Und als Beispiel, wenn Sie Ihre Tags als Vorschläge in der Dropdown-Liste haben möchten, können Sie dies tun:

= f.input :tag_list, input_html: { class: 'tags', multiple: "multiple" }, collection: ActsAsTaggableOn::Tag.most_used(30), value_method: :name