40 votes

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.

46voto

Matt Smith Points 1280

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, ...}

42voto

wesgarrison Points 3675

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
 

6voto

dwhalen Points 1567

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 les pages /users/new . Cela passera l'attribut :male à la vue avec une valeur de true , résultant en une case cochée.

0voto

phlegx Points 64

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

Sur une action nouvelle 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

En la forme: la case est cochée sur la création (par appel de nouveau), mais si la validation échoue, la case n'est pas défini avec la valeur que l'utilisateur a la poste.

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

Une autre façon, mais pas très bon (si vous voulez changer la logique que vous avez à faire une nouvelle migration) est à définir :par défaut => 1 dans la migration du modèle et de l'attribut.

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

0voto

SergXIIIth Points 333

Je l'ai fait de cette façon.

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

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

Lors de la vérification du serveur avec != '0'

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X