2013-05-30 7 views
19

Mam model o nazwie użytkownicy, który ma 2 atrybuty boolean send_email i send_text. Mam formularz, który edytuje model użytkownika, i chcę, aby ustawić te atrybuty na true/false w zależności od tego, czy pole jest zaznaczone/niezaznaczone. Oto moja formaRailsy: form_for checkbox ustawione na true lub false, czy pole jest zaznaczone/odznaczone

<%= 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 %> 

I tu jest działanie user_controller

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

Postać update i zmiana wygląda to działa doskonale, ale kiedy przesłać ten formularz z send_email lub send_text pole zaznaczone , nie zmienia atrybutów modelu użytkownika (send_email, send_text) na false

+0

więc to, co jest Twoje pytanie? – proflux

+0

to nie działa lol. przepraszam, zapomniałem to opublikować, formularz i aktualizacja działają perfekcyjnie, ale po przesłaniu tego formularza z zaznaczonym polem send_email lub send_text nie zmienia atrybutów modelu użytkownika (send_email, send_text) na false – user2158382

Odpowiedz

33

Rails zrobi to za ciebie, kiedy twój formularz działa na obiekcie, po prostu zostaw wszystkie dodatkowe elementy poza tagiem:

Wszystko powinno zacząć działać zgodnie z oczekiwaniami. Pola wyboru będą zaznaczone, jeśli atrybut jest prawdziwy, i vice versa sprawdzony stan po przesłaniu formularza wpłynie na atrybut. Reszta twojego kodu jest w porządku.

+1

Dziękuję, bardzo prosty. Sądzę, że jestem zdezorientowany czytając inne rozwiązania tego problemu – user2158382

1

Dalsze informacje o formach i aktualizowanie bazy danych

Rzeczywiście, ostatnia odpowiedź ma rację: przy użyciu składni form_for wystarczy i Rails zrobi stowarzyszenie odznaczone: false/sprawdzane: prawdziwe dla ciebie.

miałem ten sam problem nawet z tej składni. Faktem jest, że konsola serwera zwróciła mi Unpermitted parameter: checkbox_value: nie zapomnij zaktualizować swoich wymaganych/dozwolonych parametrów, aby umieścić je w params! A w moim przypadku:

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

miałem same problem.I zrobił

<% @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 %> 
Powiązane problemy