J'ai un modèle appelé utilisateurs qui a 2 attributs booléens send_email
et send_text
. J'ai un formulaire qui modifie le modèle utilisateur et je veux qu'il définisse ces attributs sur true/false selon que la case est cochée ou non. Voici mon formulaire
<%= 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 %>
Et voici l'action update
du user_controller
def update
@user = User.find(params[:id])
@user.update_attributes(params[:user])
redirect_to @user
end
Le formulaire et la mise à jour semblent fonctionner parfaitement, mais lorsque je soumets ce formulaire avec la case send_email ou send_text cochée, les attributs du modèle utilisateur (send_email, send_text) ne sont pas remplacés par false.
Rails le fera pour vous lorsque votre formulaire agit sur un objet, laissez simplement tous les éléments supplémentaires sur l'étiquette comme ceci:
<div class="field">
<%= f.label "Get Email" %> <br />
<%= f.check_box :send_email %> <br />
</div>
Et tout devrait fonctionner comme prévu. Les cases à cocher seront cochées si l'attribut est vrai, et inversement, l'état coché lorsque vous soumettez le formulaire affectera l'attribut. Le reste de votre code va bien.
Informations supplémentaires sur les formulaires et mise à jour de la base de données
En effet, la dernière réponse est correcte: utiliser la syntaxe form_for suffit et Rails fera l'association sans contrôle: false/vérifié: true pour vous.
<div class="field"> <%= f.label "Get Email" %> <br /> <%= f.check_box :send_email %> <br /> </div>
J'ai eu le même problème même avec cette syntaxe. Le fait est que la console du serveur m'a renvoyé Unpermitted parameter: checkbox_value
: n'oubliez pas de mettre à jour vos paramètres requis/autorisés à mettre dans params
! Et dans mon cas:
# ***_controller.rb
private
def operator_params
params.require(:operator).permit(:name, :website, :checkbox_value, :global)
end
J'ai eu le même problème.
<% @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 %>