2010-11-07 11 views

Répondre

17

la meilleure façon serait de définir la valeur par défaut dans votre modèle, quelque chose comme

create_table :my_table do |t| 
    ... 
    t.boolean :my_boolean, :default => true 
    ... 
end 

qui simple_form ramassera, et réglez la case à cocher être vérifié par défaut. Un moyen plus simple est de le faire comme Dave dit, et juste forcer la valeur à 1, mais si une validation échoue, et que vous affichez le formulaire à nouveau, il sera toujours vérifié, quelle que soit l'apparence de la forme a été soumis.

+3

réellement cela fonctionne mais cela implique quelque chose de plus avec une valeur par défaut sur la base de données. Je pense que la meilleure option ici est de travailler uniquement sur le côté client en sélectionnant la valeur via: input_html => {: checked => true} – coorasse

+0

Ceci est une meilleure réponse. – allesklar

2

Cela devrait fonctionner:

= f.input :some_flag, :input_html => { :value => '1' } 
+1

-1 comme serait vraiment gâcher toute forme de base de données pour l'édition de sorte que ce n'est vraiment pas un bon conseil. –

+1

Vraiment? Mec a demandé comment le mettre dans la vue. Où a-t-il dit qu'il allait l'éditer? –

+2

Salut Dave, dans les rails la vue représente le front html montré dans le navigateur. Quand Drew dit "si le type est booléen dans les coulisses" cela semblerait impliquer que cela va à l'encontre d'un modèle d'enregistrement actif et l'utilisation d'une case à cocher contre tout modèle d'enregistrement actif semblerait impliquer qu'il souhaite modifier/mettre à jour attribut. Je vais m'abstenir de vous downvoter cependant que cela semble un peu mesquine. –

1

À mon avis, la voie ferrée pour le faire serait de définir la valeur de l'attribut dans le contrôleur:

@ some_object.some_flag = 1

+1

Je pense que la plupart des gens diraient que cette logique appartient au modèle. – steel

+0

Je dirais que ça dépend. Les paramètres forts sont définis dans le contrôleur. La valeur de votre drapeau peut donc dépendre du contexte actuel. ? – ndemoreau

89

Si vous ne voulez pas ou ne peut pas mettre à jour votre migration à faire « la réponse de PerfectlyNormal, vous pouvez ajouter ce qui suit à la fin de votre f.input:

:input_html => { :checked => true } 

Ainsi, il deviendrait:

= f.input :some_flag, :input_html => { :checked => true } 

Espérons que ça aide!

+1

si la valeur du formulaire n'existe pas sur la base de données c'est la meilleure solution ... –

+0

Cela devrait être la réponse acceptée. – allesklar

+0

Ceci est la bonne réponse. – zx1986

7

Il a marché pour moi qui ne vérifie qu'une seule case à cocher avec la valeur de « Aucun »

<%= f.input :notify, label: "Notification", as: :check_boxes, collection: ["None", "Daily", "Weekly", "Monthly", "Quarterly", "Yearly"], :item_wrapper_class => 'inline', :checked => ["None", true] %> 
2

Je viens de tombé sur ce poste et ce qui a fonctionné pour moi est semblable à la dernière réponse - mais plus courte . Juste initialiser l'objet avec le paramètre souhaité:

def new 
    Object.new(my_boolean: true) 
end