2011-12-15 2 views
6

Quindi sto usando simple_form per compilare i miei moduli, anche se questo non è un requisito.Come utilizzare collection_check_boxes con una matrice?

Quello che sto cercando di fare è usare simple_forms collection_check_boxes e passargli una matrice.

sto Memorizzazione miei tag configatron:

configatron.tags = [{:name => "wheels", :tagtype => "property"}, {:name => "roof", :tagtype => "property"}, {:name => "doors", :tagtype => "property"}] 

Ecco il mio modello Tag:

class Tag 
    include Mongoid::Document 
    embedded_in :taggable, polymorphic: true 

    field :name 
    field :tagtype 
end 

Ecco che cosa ho provato:

<%= f.collection_check_boxes :tags, @tags, @tags.map{|tag| tag.name}, @tags.map{|tag| tag.name} %> 

dove @tags è impostato su configatron.tags nel controller

Voglio semplicemente far funzionare la collection_check_boxes e poi su before_save compilare il tag e incorporarlo nella risorsa corrente.

Ho letto da qualche parte che è possibile mappare nella raccolta passata e selezionare il contenuto di un oggetto di quella raccolta. Se ho capito bene, scavalca il valore_metodo? Non riesco a ricordare come si possa fare questo però. Voglio anche passare i tag correnti di questa risorsa :collection => resource.tags in modo che questi tag vengano controllati durante il rendering.

C'è un modo per farlo? Come modifico il form_builder per renderlo possibile, se sì, come? Dovrei prendere un altro approccio?

Sidenote: questa funzionalità dovrebbe funzionare anche con il backbone, in alcuni punti il ​​backbone verrebbe utilizzato per aggiungere tag.

risposta

3

Dopo aver controllato simple-form docs, penso che è necessario passare in value_method e label_method come simboli di collection_check_boxes

Come questo:

<%= f.collection_check_boxes :tags, @tags, :name, :name %> 

funziona?

5

Come usare collection_check_boxes con una Array:

FRUITS = [[1, 'Abiu'], [2, 'Açaí'], [3, 'Assai'], [4, 'Acreola']] 

<%= f.collection_check_boxes :fruits, FRUITS, :first, :last %>