Form observer

bonjour,
Je decouvre ruby on rails en Irlande donc peut etre que je vais mettre
certains termes technique en anglais ne sachant pas s’ils sont traduit
en francais.
Mon probleme je l’ai avec les observe_form.
En fait ce que je souhaite faire c’est mettre de l’AJAX dans un
formulaire. Quand les internautes rentrent des donnees dans certaines
cellules, je veux que la somme s’affiche en dessous.
J’ai 5 inputs pour avions, voitures, helicopter, motos et tanks qui
demande de rentrer le nombre de vehicules a acheter. Et a chaque fois
que l’un de ces inputs est modifie par l’internaute j’aimerais que la
somme de tout (nombre achat avions+nombre achat voiture+nombre achat
helicopter+nombre achat motos+nombre achat tanks) s’affiche en dessous
en temps reelle.
J’ai vu que les observe_form et les observe_field etaient tres pratique
pour cela.
Cependant bien que j’arrive facilement a ce que quand l’un des inputs
change, sa valeur s’inscrive dans ma ligne total ( j’observe 1 input
(field) et j’affiche sa valeur dans total), je n’arrive pas a observer
plusieurs input en meme temps, meme en les mettants dans un form_for.
Voici le code de ce qui marche:

<% form_for :vehicule, :url => { :action => “create”} do %>
<%= render :partial => “form” %>
<%= submit_tag " Create " %>
<%= observe_field :voiture_achat,
:frequency => 0.1,
:update => ‘somme_vehicule’,
:before => “Element.show(‘spinner’)”,
:complete => “Element.hide(‘spinner’)”,
:url => {:action=>‘somme_vehicule’}
%>
<% end %>
sachant que dans ma vue _form.rhtml j’ai un :
<%= text_field “voiture”, “achat”, :size => 10 %>

<%= render :partial => 'total_vehicule_ht' %> et dans ma vue _total_vehicule_ht.rhtml j'ai: <%= @sum %> et mon controller contient: @sum = params[:achat] || '' render(:partial => 'total_vehicule_ht')

Ca ca marche,
Mais ici je n’affiche que ce qui est entre dans voiture_achat dans le
total.
Moi maintenant j’aimerais observer toutes les entree de mon formulaire
(form_for) et en faire la somme (dans mon controller) en temps reelle.
J’ai passe enormement de temps et quoi que je fasse ca ne marche pas:
Observe_form, nom du formulaire, emplacement de la ou j’ecrit
l’observer… et il n’y a pas grand chose sur internet la dessus, je
deprime!
Mais je ne veux pas de Java Script directement seulement de l’AJAX qui
certes fait du Java script mais comme ca ca me permet de faire une
application plus evolutive et robuste.

Merci de votre aide.

Je vais te donner la solution :

  • tout d’abord donne un id à ton formulaire, en mettant <% form_for
    :voiture,
    :url => { :action => “create”}, :html => {:id => ‘calcul_form’} do |f|
    %>
    prends l’habitude d’utiliser le nom de ton modèle dans form_for, ce qui
    te
    permet d’écrire dans ton partial :

<%= f.text_field :achat, :size => 10 %>, en n’oubliant pas de mettre :

<%= render :partial => “form”, :locals => {:f => f} %> dans ta vue.

  • Maintenant que tes vues sont beaucoup plus propres, Ã la fin de ton
    formulaire, utilise observe_form comme ceci :

<%= observe_form(“calcul_form”, :frequency=> 1, :update=>
“somme_vehicule”,
:url=> {:action =>‘somme_vehicule’} )%>

  • Dans ton controller, tu peux récupérer les champs de ton formulaire de
    la
    manière suivante :

params[:voiture][‘achat’].

J’espère avoir été assez clair, sinon, n’hésite pas !

Thomas GALIBERT.

Le 26/11/07, Raph I. [email protected] a écrit :

J’ai 5 inputs pour avions, voitures, helicopter, motos et tanks qui
plusieurs input en meme temps, meme en les mettants dans un form_for.
:url => {:action=>‘somme_vehicule’}
et mon controller contient:
l’observer… et il n’y a pas grand chose sur internet la dessus, je


Thomas GALIBERT
Les Feuillantines
40 rue Raoul Bayou
34500 BEZIERS
04 67 31 83 90