2013-05-30 9 views
19

Ho un modello chiamato utenti che ha 2 attributi booleani send_email e send_text. Ho un modulo che modifica il modello Utente, e voglio che imposti quegli attributi a vero/falso a seconda che la casella sia selezionata/deselezionata. Qui è la mia formaRails: form_per checkbox impostato su true o false se la casella è selezionata/deselezionata

<%= form_for(@user) do |f| %> 
    <div class="field"> 
     <%= f.label :email %> <br /> 
     <%= f.text_area :email %> <br /> 
    </div> 
    <div class="field"> 
     <%= f.label :cell %> <br /> 
     <%= f.text_area :cell %> <br /> 
    </div> 
    <div class="field"> 
     <%= f.label "Get Email" %> <br /> 
     <%= f.check_box :send_email, {}, true, false %> <br /> 
    </div> 
    <div class="field"> 
     <%= f.label "Get Text" %> <br /> 
     <%= f.check_box :send_text, {}, true, false %> <br /> 
    </div> 
    <div class="actions"> 
    <%= f.submit "Submit", class: "button small radius" %> 
    <%= link_to "go back", @user, class: "button small radius secondary" %> 
</div> 
<% end %> 

Ed ecco la update azione del user_controller

def update 
    @user = User.find(params[:id]) 
    @user.update_attributes(params[:user]) 
    redirect_to @user 
end 

La forma e l'aggiornamento sembra che funziona perfettamente, ma quando ho inviare questo modulo con il send_email o scatola send_text selezionata , non cambia gli attributi del modello utente (send_email, send_text) su false

+0

quindi qual è la tua domanda? – proflux

+0

non funziona lol. scusa ho dimenticato di postare che, la forma e l'aggiornamento funziona perfettamente, ma quando invio questo modulo con la casella send_email o send_text selezionata, non cambia gli attributi del modello utente (send_email, send_text) su false – user2158382

risposta

33

Rails lo farà per te quando il tuo modulo sta agendo su un oggetto, lascia semplicemente tutte le cose extra fuori dal tag in questo modo:

E dovrebbe iniziare a funzionare come previsto. Le caselle di controllo saranno spuntate se l'attributo è vero, e viceversa lo stato controllato quando si invia il modulo influenzerà l'attributo. Il resto del tuo codice va bene.

+1

Grazie, molto semplice. Immagino di essere stato confuso dalla lettura di altre soluzioni a questo problema – user2158382

1

Ulteriori informazioni su forme e aggiornamento del database

In effetti, l'ultima risposta è giusta: utilizzando la sintassi form_for è sufficiente e Rails farà l'associazione incontrollato: false/controllato: vero per voi.

Ho avuto lo stesso problema anche con quella sintassi. Il fatto è che la console del server mi ha restituito Unpermitted parameter: checkbox_value: non dimenticare di aggiornare i parametri richiesti/consentiti da inserire in params! E nel mio caso:

# ***_controller.rb 
     private 
     def operator_params 
      params.require(:operator).permit(:name, :website, :checkbox_value, :global) 
     end 
0

ho avuto lo stesso ha fatto problem.I

<% @batches.each do |batch| %> 
    <div class="name_list<%=cycle('odd', 'even')%>"><li> 
    <label><%= check_box_tag "send_sms[batch_ids][]", batch.id,false,:class=>'right' %> 
    <div class="att_list_names"> <%= batch.full_name %></div> </label> 
    </li> </div> 
    <% end %> 
Problemi correlati