web-dev-qa-db-fra.com

Comment puis-je faire en sorte qu'une case à cocher soit "cochée" par défaut dans Rails 1.2.3?

Comment puis-je faire en sorte qu'une case à cocher soit "cochée" lorsqu'elle est initialement affichée?

Je n'ai pas trouvé de méthode "Rails" pour faire cela (qui fonctionne) donc je l'ai fait avec JavaScript. Existe-t-il un moyen approprié de le faire dans Rails? J'utilise Rails 1.2.3.

40
daustin777

Si vous utilisez check_box dans le contexte d'un formulaire, la case à cocher affichera la valeur de ce champ.

@user = Person.find(:first)
@user.active = true
check_box 'user', 'active'  #=> will be checked by default

Si vous utilisez check_box_tag, le troisième paramètre est l'état initial ( check_box_tag doc ):

check_box_tag "active", 1, true
42
wesgarrison

Rails 3.x

= form_for(@user) do |f|
  = f.check_box :subscribe, {checked: true, ...}

Cela définit l'état vérifié sur true et devrait fonctionner correctement. Notez la syntaxe Ruby 1.9.x du hachage, pour Ruby 1.8.x utilisez le format de balise de hachage {: vérifié => vrai, ...}

46
Matt Smith

Dans la nouvelle action de votre contrôleur, essayez:

@user = User.new(:male => true)

Où: male est l'attribut que vous souhaitez vérifier par défaut sur le /users/new pages. Cela passera le :male attribut à la vue avec une valeur de true, résultant en une case cochée.

6
dwhalen

J'ai été choqué qu'aucune des réponses ne résout 100% du problème.
Comme toutes les solutions suggérées donneront checked résultat sur le formulaire d'édition, même si l'utilisateur a décoché la case.

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

Fonctionne pour Rails 4 +, non testé ci-dessous.

5
GEkk

Simple

<%= f.check_box :subscribe, checked: "checked" %>
5
rebbailey

Cela fonctionne sur Rails 2.3.x et Rails 3.0.x!

Lors d'une nouvelle action dans le contrôleur, la case à cocher est définie sur true.

# in the controller
def new
  @user = Person.find(:first)
  @user.active = true
end

Dans le formulaire: la case à cocher est cochée à la création (par appel nouveau) mais si la validation échoue, la case à cocher reste définie avec la valeur que l'utilisateur a publiée.

# in the view
<%= form_for ..... |f| %>
  ...
  <%= f.check_box :active %>
  ...
<% end %>

Une autre façon, mais pas si bien (si vous voulez changer la logique, vous devez faire une nouvelle migration) est de définir : default => 1 dans la migration du modèle et de l'attribut donnés.

class CreatePeople < ActiveRecord::Migration
  def self.up
    create_table :people do |t|
      ...
      t.boolean    :active,             :null => false,
                                        :default => 1
      t.timestamps
    end
  end

  def self.down
    drop_table :people
  end
end
0
phlegx

Je l'ai fait de cette façon.

Ajouter un champ masqué avec la valeur 0 AU-DESSUS check_box_tag

<%= hidden_field_tag :subscribe, '0' %>
<%= check_box_tag :subscribe, '1', params[:subscribe] != '0' %>

Sur le serveur, vérifiez avec != '0'

subscribe = params[:subscribe] != '0'
0
msa7