5

Mi piacerebbe avere un elenco di tag select2, in cui potrei selezionare più tag esistenti e aggiungerne di nuovi.Rails atti-come-taggable-on con select2 (e simple_form)

Ho provato molti modi diversi e io non ottengo la casella di selezione2 o viene passato solo un valore (l'ultimo).

Questo è il più vicino ho ottenuto (passa ultimo valore):

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

risposta

3

Come ho detto prima, normale biblioteca select2 ora utilizza solo selezionare i tipi di input, ma funziona con i tipi di input quando si utilizza biblioteca select2-pieno.

Quindi, questo era un modo per uscire da un problema.

Ancora ho avuto problemi con il solo passaggio di un singolo valore. In realtà stavo copia/incolla il codice da uno degli esempi ed era sbagliato. È stato affermato che i parametri forti dovrebbero includere: tag_list, che è ovvio, ma in realtà è {tag_list []} che è stato necessario per accettare tutti i valori.

Ora funziona come un incanto.

+0

Il tuo punto su tag_list [] è stato fondamentale per me - i tag vengono inviati come una serie di stringhe come ["a", "b", "c"], non una singola stringa come "a, b, c" –

1

provare questo, spero che questo funzionerà per voi.

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

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

Purtroppo non aiuta. Sembra che debba essere selezionato tipo di input. Quindi ho aggiunto:: select, altrimenti è solo una normale casella di input. In questo modo ora ricevo il menu a discesa, ma con le opzioni Sì e No, non i miei tag. Inoltre, non è multiselect. –

+0

fammi pensare. –

2

Per me lavorare in questo modo:

script di caffè:

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

e nella vista:

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

parte importante è multipla: "multiplo"

E naturalmente, come disse Mitja, non dimenticare di mettere {tag_li st: []} per i potenti parametri del controller.

E come esempio, se si vuole avere i tag come suggerimenti della discesa, si potrebbe fare questo:

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