web-dev-qa-db-fra.com

Comment faire une check_box cochée dans les rails?

J'ai fait des cases à cocher en utilisant l'assistant de formulaire Rails suivant:

<%= check_box("tag", tag.id) %>

Cependant, je dois en vérifier certaines par défaut. La documentation de Rails ne précise pas comment faire cela. Y a-t-il un moyen? Comment?

27
user1779563

Ceci a une solution très simple qui est directement supportée par check_box (du moins à partir de Rails 4, je n'ai pas vérifié l'ancienne documentation)

<%= check_box("tag", tag.id, {checked: true}) %>

Cela rendra la case à cocher cochée. Bien sûr, au lieu de true, vous utiliserez une logique qui déterminera si chacune d’elles est cochée.

42
John Bachir

Si vous avez besoin de cocher la case check_box sur new et correctement remplie sur edit, vous pouvez effectuer les opérations suivantes: 

<%= f.check_box :subscribe, checked: @event.new_record? || f.object.subscribe? %>

Comme je l'ai mentionné ici

5
GEkk

La documentation Rails indique comment le faire vérifier et cela dépend de l'objet. Si vous n'avez pas d'objet d'instance à utiliser avec check_box, votre meilleure option consiste à utiliser la check_box_tag comme indiqué. Si vous le faites, lisez la suite.

Voici le lien vers la documentation sur l’aide check_box. Fondamentalement, cela fonctionne si vous devez définir une variable d'instance. Cette variable d'instance doit avoir une méthode qui retourne un entier ou un booléen. De la docs:

Cet objet doit être un objet d'instance (@object) et non un local objet. Il est prévu que cette méthode retourne un entier et si cela entier est supérieur à zéro, alors la case à cocher est cochée.

Par exemple, supposons que vous ayez une instance @tag dans votre vue qui a une méthode activée. L'extrait de code suivant entraîne l'activation de la case à cocher lorsqu'elle est activée. Elle est définie sur true sur l'objet @ tag et décochée lorsque la valeur est false. Pour l'activer par défaut, définissez l'attribut enabled sur true dans votre contrôleur. Les deux dernières variables sont les valeurs que vous souhaitez soumettre avec le formulaire lorsque les cases à cocher sont cochées et non cochées.

<%= check_box "tag", "enabled", {}, "1", "0" %>

Souvent, vous verrez l’aide check_box utilisée avec un générateur de formulaire. Donc, si form_for a été utilisé pour l'instance @tag, vous utiliseriez probablement cet extrait:

<%= f.check_box :enabled %>
4
Dan Polites

Le check_box_tag au lieu de check_box permet de définir qu'il a été vérifié.

2
user1779563

Pas besoin d'écrire coché: true pour Rails> = 4.0 Écrivez simplement

<%= check_box_tag "name", value, true %> # true or false
2
Govind shaw

Le problème avec toutes ces solutions est que cela ne fonctionne pas bien avec le hachage params lors des resoumissions, aussi, pour le moment, j'utilise quelque chose comme ça 

# ApplicationHelper
def resolve_boolean_parameter resource, attribute, options = {}
  default = options.delete(:default)
  return default unless params[:utf8]

  return params[resource][attribute] == "1"
end

et ensuite dans la vue:

<div><%= f.label :accepts_newsletter, "Receive Newsletters" %>
  <%= f.check_box :accepts_newsletter, :checked => resolve_boolean_parameter(:user, :accepts_newsletter, default: true)  %>
</div>
0
bbozo

Nouvelle fonction placée dans votre assistant

def check_if_true(item)
  ActiveModel::Type::Boolean.new.cast(item)
end

Dans votre vue

<%= check_box("test", "active", {checked: check_if_true(@test.active) , :multiple => true, :style => "margin-left: 16px;"}, "true", "false") %>
0
FlyingV

À l'aide de check_box_tag, vous pouvez le définir sur true afin qu'il soit déjà coché. Plus d'infos ici: http://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html#method-i-check_box_tag

0
Marcelo Alves