html - multiple - Rails: form_for checkbox establecido en true o false si la casilla está marcada o no
rails checkbox tag (3)
Rails hará esto por usted cuando su formulario esté actuando sobre un objeto, simplemente deje todas las cosas adicionales fuera de la etiqueta así:
<div class="field">
<%= f.label "Get Email" %> <br />
<%= f.check_box :send_email %> <br />
</div>
Y todo debería empezar a funcionar como esperas. Las casillas de verificación se marcarán si el atributo es verdadero, y viceversa, el estado marcado cuando envíe el formulario afectará al atributo. El resto de tu código está bien.
Tengo un modelo llamado usuarios que tiene 2 atributos booleanos send_email
y send_text
. Tengo un formulario que edita el modelo de usuario, y quiero que establezca esos atributos en verdadero / falso dependiendo de si la casilla está marcada / no marcada. Aqui esta mi forma
<%= 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 %>
Y aquí está la acción de update
del user_controller
def update
@user = User.find(params[:id])
@user.update_attributes(params[:user])
redirect_to @user
end
El formulario y la actualización parecen funcionar perfectamente, pero cuando envío este formulario con el cuadro send_email o send_text marcado, no cambia los atributos del modelo de usuario (send_email, send_text) a falso
Tuve el mismo problema.
<% @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 %>
Más información sobre formularios y actualización de la base de datos.
De hecho, la última respuesta es correcta: usar la sintaxis de form_for es suficiente y Rails hará la asociación sin marcar: false / checked: true para usted.
<div class="field"> <%= f.label "Get Email" %> <br /> <%= f.check_box :send_email %> <br /> </div>
Tuve el mismo problema incluso con esa sintaxis. El hecho es que la consola del servidor me Unpermitted parameter: checkbox_value
: ¡no olvide actualizar sus parámetros requeridos / permitidos para poner en params
! Y en mi caso:
# ***_controller.rb
private
def operator_params
params.require(:operator).permit(:name, :website, :checkbox_value, :global)
end