La fonctionnalité que je prévois de faire consiste à insérer des éléments de formulaire en fonction d’un nombre choisi dans une balise select.
J’ai une balise select appelée number_of_passengers et je prévois d’append dynamicment de nouveaux champs de passagers pour le nombre choisi. Supposons que je sélectionne 2 dans number_of_passengers, puis que 2 formulaires apparaissent dans un jeu de champs. ces formulaires contiennent le nom, l’âge, le poids, etc.
J’ai essayé de suivre ceci:
appeler une fonction rails de jquery?
et juste converti en haml-speak mais je reçois des erreurs chaque fois que j’utilise la balise: javascript. De plus, je ne pense pas pouvoir “échapper” au tag javascript une fois que je suis dedans
:javascript $('#number_of_passengers').change(function() { var $num_of_passengers = $(this).val(); for($i=0; $i<$num_of_passengers;$i++) { $('.passenger-info ul').append(' "new_passenger", :locals => {:booking => @booking }) %>'); } })
De plus, puisque je suis dans un formulaire, comment puis-je transmettre la variable @booking au local? Cela semble vraiment compliqué et je prévois de faire le sale chemin en bouclant 20 fois (20 passagers maximum), puis en masquant / affichant celles-ci en fonction du nombre sélectionné. Mais c’est trop sale, vous ne pensez pas?
Pour que l’interpolation fonctionne, vous devez faire quelque chose comme:
!= "$('.passenger-info ul').append('#{escape_javascript( render :partial => 'new_passenger', :locals => {:booking => @booking })}');
si simple dit: ajoutez le !=
au début de la ligne, et incluez la chaîne entre guillemets doubles.
Votre question à propos de @booking
: Je vous suggère d’examiner certains exemples de formulaires nesteds afin de le rendre plus clair pour vous (par exemple, ceci et ce railcast).
J’ai effectivement réussi à le faire en ajoutant:
respond_to do |format| format.js { render :partial => "new_passenger" } end
Ainsi, même si la demande était en js, elle retournera un code HTML partiel. Chouette
La syntaxe de Rails change tout le temps mais cela ne devrait pas
render :partial => "new_passenger", :locals {:booking => @booking })
être
render :partial => "new_passenger", :locals => {:booking => @booking })
Vous pouvez échapper à javascript dans le bloc javascript car vous évaluez les balises ruby.
Quels messages d’erreur recevez-vous?
La dernière partie de votre question n’est pas claire pour moi mais c’est ce que vous recherchez:
- form_for @user do |f| # f.object is equal to @user