2015-06-02 4 views
8

Sto provando a utilizzare un semplice modulo con la mia app per rails 4.Simple Form - Rails 4 - editing

Ho un modello di progetto, che ha un modello di ambito. L'ambito appartiene al progetto. Ho un terzo modello, chiamato partecipante, che appartiene all'ambito. Scope accetta gli attributi nidificati per il partecipante e il progetto accetta gli attributi nidificati per l'ambito.

Quando creo un nuovo progetto, il mio modulo ha partial che sono moduli annidati per ogni ambito e partecipante. Nella mia forma di ambito, chiedo se questo progetto coinvolge i partecipanti. Se la risposta è vera, utilizzo l'helper di forma JS per mostrare un partial nascosto che contiene la forma del partecipante.

Se, dopo aver creato il progetto, voglio modificarlo, la funzione di modifica mi riporta al modulo del progetto, che mostra la casella di controllo per il partecipante (come vero), ma nasconde il modulo del partecipante.

La mia domanda è, se la casella di controllo del partecipante è selezionata come vera, quindi il modulo partecipante annidato nel modulo del progetto deve essere rivelato. Il mio helper di forma JS nasconde questo modulo fino a quando la casella è selezionata come true, e questo funziona correttamente nella modalità di creazione, ma ho bisogno di deselezionare la casella del partecipante nel modulo di ambito e ricontrollare per rivelare la forma del partecipante - in modo che io possa modificare quei campi.

Sapete come visualizzare il modulo partecipante se la domanda relativa all'ambito di partecipazione relativa alla partecipazione è vera senza deselezionare e ricontrollare il modulo?

Il mio codice è il seguente:

Nella mia forma JS aiutante, ho (che nasconde la forma partecipante nidificato a meno che la questione portata chiedendo se è richiesta la partecipazione è vero):

$(document).on 'change', '#' + inString + '_scope_attributes_if_participant',()-> 
    if $('#' + inString + '_scope_attributes_if_participant').is(':checked') 
    $('#participationrequest').show() 
    else 
    $('#participationrequest').hide() 

In la mia forma ambito, ho:

<%= s_all.input :if_participant, :as => :boolean, :label => false, inline_label: 'Public participants or volunteers' %> 

Grazie

+0

ho trovato un modo che funziona, che è: – Mel

risposta

4
if $('#' + inString + '_scope_attributes_if_participant').is(':checked') 
    $('#participationrequest').show() 
else 
    $('#participationrequest').hide() 
$(document).on 'change', '#' + inString + '_scope_attributes_if_participant',()-> 
    if $('#' + inString + '_scope_attributes_if_participant').is(':checked') 
    $('#participationrequest').show() 
    else 
    $('#participationrequest').hide() 
0

sei attualmente solo controllando se la casella è spuntata quando viene cambiata. Tuttavia, quando il modulo viene caricato con la casella selezionata, l'evento change non viene generato e quindi il codice non viene eseguito.

per far funzionare il controllo quando la pagina viene caricata, aggiungere qualcosa di simile ai tuoi JS (mi perdoni per aver scritto in JS invece di CoffeeScript):

$(document).on('ready',function(){ 
    if $('#' + inString + '_scope_attributes_if_participant').is(':checked') 
     $('#participationrequest').show(); 
} 

Si noti che non è necessario l'altro parte del controllo qui, poiché l'impostazione predefinita è nascondere l'elemento #participationrequest.

+0

Ciao, grazie mille per l'aiuto. Ho paura che non funzioni per me, nelle modalità di creazione o aggiornamento. – Mel

+0

controllare la console JS per gli errori. Forse il selettore '$ ('#' + inString + '_scope_attributes_if_participant')' non è corretto? o forse quella parte del modulo viene caricata dopo che la pagina è pronta tramite ajax in modo che l'elemento non esista ancora su document.ready? – tbrisker

0

Prova questa:

<div id='participationrequest' style='<%= "display:none;" unless scope.if_participant? %>'> 
    <%= render partial: 'you_form_partial' %> 
</div>