5

Chciałbym mieć listę rozwijaną select2 tagów, gdzie mógłbym wybrać wiele istniejących tagów i dodać nowe.Szyny działa-jak-taggable-on z select2 (i simple_form)

Próbowałem na wiele różnych sposobów i albo nie otrzymuję działającego select2 box, albo tylko jedna wartość jest przekazywana (ostatnia).

Jest to najbliżej mam (przechodzi ostatnią wartość):

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

Odpowiedz

3

Jak już wspomniano wcześniej, normalna biblioteka select2 używa teraz tylko wybrać typy wejściowych, ale to nie działa z typów wejść przy użyciu select2 pełna biblioteka.

To było wyjście z jednego problemu.

Nadal miałem problemy z przekazaniem tylko jednej wartości. Właściwie to kopiowałem/wklejałem kod z jednego z przykładów i było źle. Stwierdzono, że silne parametry powinny zawierać: tag_list, co jest oczywiste, ale tak naprawdę jest to {tag_list []}, która była potrzebna do zaakceptowania wszystkich wartości.

Teraz działa jak urok.

+0

Twoja uwaga na temat tag_list [] była dla mnie kluczowa - tagi są przesyłane jako tablica ciągów takich jak ["a", "b", "c"], a nie pojedynczy ciąg jak "a, b, c" –

1

Spróbuj jedną nadzieję, że to będzie pracować dla Ciebie.

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

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

Niestety to nie pomaga. Wygląda na to, że musi to być typ wejściowy. Dodałem więc:: select, w przeciwnym razie jest to zwykłe okno wprowadzania danych. W ten sposób otrzymuję teraz listę rozwijaną, ale z opcją Tak i bez opcji, a nie z moich tagów. Dodatkowo nie jest to multiselect. –

+0

Pozwól mi o tym pomyśleć. –

2

Dla mnie działa to:

coffeescript:

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

aw widzenia:

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

Ważne jest to, wiele: "stwardnienie"

I oczywiście, jak powiedział Mitja, nie zapomnij umieścić {tag_li st: []} do kontrolera silne parametry.

I jako przykład, jeśli chcesz mieć tagów jak sugestie w rozwijanym, można to zrobić:

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