Checkbox avec ruby

Boujour tout le monde.
j’apprend en ce moment à programmmer en ruby (j’suis débutant en ruby
en claire ). J’aimerais que quelqu’un m’explique comment on gère les
checkbox dans un controleur. J’ai essayer d’utiliser params[:checkbox]
pour récuper des validations postées à partir d’une page rhtml, mais je
remaque que ‘params’ contient aussi bien les champs cochés par
l’utilisateur que ceux qui ne le sont pas.
Queqlqu’un pourait il me montrer un moyen simple et efficace de faire
cette gestion

Merci

Il y en a des tas. Mais tu ne donnes pas assez d’infos dans ton post,
alors on va supposer que tu as une todo-list avec des taches a faire
‘done’ (faites) ou pas.

Certains font du Javascript avec une option ‘onclick’ qui lance une
fonction du controleur ‘toggle’ : qui fait tout bêtement @task.done =
not @task.done.
Mais je trouve ca un peu nul.

Le mieux a faire est d’aller dans ton code généré et de trouver le
‘name’ et ‘id’ de ta checkbox, probablement name=‘task_done’
id=‘task[done]’, tu sais donc qu’au moment de sauver tu auras dans tes
parametres params[:task][done] = qqch.
A toi de debugguer les parametres pour voir comment tu peux differencier
tout ca (d’après la valeur), ensuite tout ira bien.

Ce que j’ai fait (c’est peut etre un peu gore) c’est de faire lors de la
methode ‘update’ de mon controleur, si @request == post, alors je fais
un @task.set_done(@params). Ainsi mon modele “connait” les params, et tu
peux donc coder la fonction set_done(params) qui fait @done =
params[:task][done]…

J’espère que c’est assez détaillé. N’hésite pas à faire des outputs de
débug pour comprendre ce qu’il se passe a CHAQUE etape, tu apprendras
ainsi 1/ ou est-ce que ca buggue 2/ comment fonctionne Rails en interne
:wink:

Salut,

Juste pour s’y retrouver : dans un contrôleur, params est un Hash qui
contient tous les paramètres passés en requête que ces paramètres
soient passés en get ou en post.

Un formulaire sera automatiquement passé en post par rails (on peux
passer outre cette réaction, mais le mieux est d’avoir une raison
pour ça).

Choses à savoir sur les checkboxes dans rails : Un checkbox on et
d’accord est automatiquement dans un formulaire. Et coché il vaut 1,
non-coché il vaut 0.

Un petit formulaire :

<%= start_form_tag :action => ‘create’ %>

<%= check_box_tag :my_check_box %>

<%= end_form_tag %>

Et dans le controller tu sauras si ton checkbox était coché ou non en
cherchant dans le hash params ainsi :

params[:my_check_box]

Dans un formulaire avec plus qu’un checkbox unique, ton checkbox sera
certainement dans un “sous-hash” de hash, comme ceci params[:form]
[:my_check_box]

Cela sera utile pour passer le formulaire directement à
activerecord : Post.new(params[:form]). Tu n’a pas ainsi à te soucier
des checkbox, AR sachant gérer les booleans.

Tu n’utilisera plus le helper check_box_tag dans ta vue mais check_box.

Mais cela dépasse ta question. Renseigne toi sur le formulaire dans
le livre Agile Dev. with RoR ou sur le wiki ror.

à+NP

P.S. : http://api.rubyonrails.org/classes/ActionView/Helpers/
FormHelper.html#M000394

Merci les gars.
J’ai finalement trouvé une méthode assez simple pour récuperer les
valeurs des cases cochées:
Dans mon formulaire j’ai finalement utiliser des balises html simple
pour les checkbox en prenant le soin de mettre un tableaux dans le
champs name de la balise input du checkbox comme suit :

           <input type="checkbox" name ="choix[]" 

value="<%=materiel.id%>" >

Et dans le controleur j’ai récupéré les données postées comme suit :

      if params[:choix]!=nil      #Si au moins une case a été cochée

        for mat in params[:choix]

          #récupérer l'objet materiel grace à son id conténu
          #ds le paramètre "value" de  l'input

          materiel = Materiel.find(mat)
          puts materiel.nomMat
        end

        redirect_to :action => 'pagePrincipale'

      end

Merci les gars vos réponse m’ont guidé