Rails et javascript


#1

Bonjour,

Peut-on mélanger du javascript avec du ruby ? Je m’explique. A partir
d’un fichier xsd via un fichier xsl, je génère un formulaire html. J’ai
besoin de créer des champs inputs à volonté selon le nombre souhaité par
l’utilisateur. Si celui-ci entre 3 cases, il tape sur “entrée” et les
trois champs apparaissent.

D’ou la nécessité d’utiliser javascript… Y a t’il un autre moyen de le
faire avec ruby sans devoir valider le formulaire ?


#2

D’ou la nécessité d’utiliser javascript… Y a t’il un autre moyen de le
faire avec ruby sans devoir valider le formulaire ?

Avec Prototype et render :partial ça se fait. Ca permet de créer du
javascript qui va générer du code ruby (le partial) qui va générer ton
html: champs, boutons, etc.


#3

Dans ma vue, je souhaite créer un bouton “ajouter” qui ajoute un champ
de formulaire par exemple.

J’intègre le code suivant :

<%= link_to_remote “Ajouter”,
:url=>{:action=>“ajouter”}
%>

Dans mon contrôleur, je vais ajouter :

def ajouter
@utilisateurs.find(:all)
end

(même action que index)

et je rajoute le chemin dans mon fichier routes.rb :
map.connect ‘utilisateurs’, :controller => ‘utilisateurs’, :action =>
‘ajouter’,
:conditions => { :method => :get }

et il ne me restera plus qu’à intégrer mon ajouter.rjs dans la partie
“view” avec le code suivant :

page.insert_html :bottom, “code_champ”, “”

Mais quand je clique sur le bouton, rien ne se passe… Je ne vois pas
ce qui cloche à part le fait que c’est moi qui code…


#4

Tony C. wrote:

page.insert_html :bottom, “code_champ”, “”

S’il s’agit juste d’ajouter un input a ton formulaire, nul besoin de
passer par ton controller
un simple link_to_function avec un petit js qui te colle ton input
suffit

En fait, j’ai utilisé le scaffold pour générer une application simple.
J’ai ma vue new.html dans laquelle je souhaite intégrer mon code
permettant l’ajout de champ. En pratique, j’ai un champ par attribut de
ma base (un champ texte pour nom, un pour prenom…). La, je souhaite
avoir par exemple trois champs prenoms.

Est ce que je ne dois pas utiliser les balises rhtml ? et mettre par
exemple quelque chose comme ça (ça ne marchera pas, c’est pour
l’idée…) :

page.insert_html :bottom, “code_champ”, <%= f.label :test %><%= f.text_field :test_+compteur %>


#5

page.insert_html :bottom, “code_champ”, “”

S’il s’agit juste d’ajouter un input a ton formulaire, nul besoin de
passer par ton controller
un simple link_to_function avec un petit js qui te colle ton input
suffit


#6

en fait, ça a marché sans faire appel au contrôleur! J’ai bien mes X
champs input de type texte. Je m’interroge sur le traitement des
données. Mes champs vont-ils etre pris en compte par le controleur avec
ceux qui existent déjà ?

Dans mon contrôleur, j’ai l’action new qui permet de traiter l’ajout
d’informations. Je dispose d’une table ‘maison’ par exemple avec un id
(bidon dans mon cas), un nom unique et un champ personne. Dans mes
champs texte input ajoutés précédemment, je vais avoir des noms de
personnes et je souhaite intégrer dans ma bdd sous forme de nouvelles
lignes. Je vais devoir récupérer le contenu de ces champs. Peut on faire
un $_POST[champ] ? quelque chose comme ça…
Ce ne sont pas des attributs de mon objet comme nom_maison ou encore
personne

Maison :
ID - NOM_MAISON - PERSONNE
1 MAISON_VERTE JULIEN
2 MAISON_VERTE RICHARD
3 MAISON_VERTE DAVID
4 MAISON_VERTE PIERRE


#7

Monseigneur babiben wrote:

Tony C. wrote:

page.insert_html :bottom, “code_champ”, “”

S’il s’agit juste d’ajouter un input a ton formulaire, nul besoin de
passer par ton controller
un simple link_to_function avec un petit js qui te colle ton input
suffit

En fait, j’ai utilisé le scaffold pour générer une application simple.
J’ai ma vue new.html dans laquelle je souhaite intégrer mon code
permettant l’ajout de champ. En pratique, j’ai un champ par attribut de
ma base (un champ texte pour nom, un pour prenom…). La, je souhaite
avoir par exemple trois champs prenoms.

Est ce que je ne dois pas utiliser les balises rhtml ? et mettre par
exemple quelque chose comme ça (ça ne marchera pas, c’est pour
l’idée…) :

page.insert_html :bottom, “code_champ”, <%= f.label :test %><%= f.text_field :test_+compteur %>

Ben…comme je l’ai dis au dessus, faire un appel a ton controller ne se
justifie que si tu as besoin de récupérer des données (par exemple,
chercher une liste d’utilisateurs pour l’afficher).
Ici, nul besoin de tout ceci, tu remplace juste ton link_to_remote par
un truc du style :

link_to_function “ajouter”, “ajout_champs();”

Et tu ajoute ton javascript en début de page :


#8

Monseigneur babiben wrote:

d’informations. Je dispose d’une table ‘maison’ par exemple avec un id
(bidon dans mon cas), un nom unique et un champ personne. Dans mes
champs texte input ajoutés précédemment, je vais avoir des noms de
personnes et je souhaite intégrer dans ma bdd sous forme de nouvelles
lignes. Je vais devoir récupérer le contenu de ces champs. Peut on faire
un $_POST[champ] ? quelque chose comme ça…
Ce ne sont pas des attributs de mon objet comme nom_maison ou encore
personne

params[:champs]


#9

le mieux c’est :params[:personnes].each do |person| puts
person[:mon_champ_1]
puts person[:mon_champ_2]
end

pour le formulaire :
<% f.fields_for “personnes[]” do |answer| %> (ou un truc comme ca)
2009/4/22 Monseigneur babiben removed_email_address@domain.invalid


#10

ok merci mais il y a pas un moyen pour faire params[:personne_0],
params[:personne_1]… car j’ai 4 champs.

J’ai essayé d’utiliser un compteur mais il n’est pas pris en compte. On
doit bien pouvoir faire un params[:personne[compteur]] ?


#11

Hé Monseigneur tu veux pas qu’on code l’appli pour toi non plus ?
Je te conseil de regarder ces screencasts qui te permettrons de
résoudre pas mal de tes soucis
http://railscasts.com/episodes?search=complex

On 22 avr, 17:16, Monseigneur babiben removed_email_address@domain.invalid


#12

Monseigneur babiben wrote:

Ok, d’après ce que j’ai lu sur le field_for
(http://www.frailers.net/articles/11-editer-plusieurs-mode-les-avec-fields-for),
je ne vois pas trop comment je pourrais l’appliquer dans mon cas. Je ne
cherche à disposer d’un formulaire avec des champs pré-remplis provenant
d’un autre contrôleur comme l’exemple du blog.

Dans mon cas, j’ai seulement un formulaire avec des informations (sous
forme de champ texte) et je souhaite intégrer des données “étrangères”
(toujours sous forme de champ texte) ayant le même nom seulement
différencié par un compteur à la fin.

Et le problème concerne le traitement de ces paramètres par le
controleur (personne_0, personne_1)…

Je dois surement être à l’ouest ???

Le field_for, c’est juste pour te simplifier la vie en utilisant un
tableau :wink:
Mais tu n’es pas non plus obligé, tu peux aussi utiliser params[:champs]
sous la forme params[“champs”] (plus facile de manipuler des chaines
dans ton cas)

Maintenant, sans être aussi vindicatif qu’au dessus, tout ceci se trouve
très facilement dans le 1er tutoriel ou bouquin sur Rails. Prends le
temps de lire, tu gagneras bcp de temps ensuite


#13

ok merci. Mais j’ai trouvé une solution… Par contre, comment execute
t-on directement du javascript dans ruby sans utiliser un bouton. Par
exemple, j’ai ma fonction bidule déclarée entre les balises

au début de mon code.

Je souhaiterais l’executer dans la page sans avoir à cliqué sur un
lien…


#14

Tu peux exécuter un certain nombre d’action une fois que la page est
complètement chargée, par exemple :

Source : http://snippets.dzone.com/posts/show/1775

Cela répond à ta question?

Bousmanne Cédric
http://cedricbousmanne.com/

Le 23-avr.-09 à 10:08, Monseigneur babiben a écrit :


#15

Ok, d’après ce que j’ai lu sur le field_for
(http://www.frailers.net/articles/11-editer-plusieurs-mode-les-avec-fields-for),
je ne vois pas trop comment je pourrais l’appliquer dans mon cas. Je ne
cherche à disposer d’un formulaire avec des champs pré-remplis provenant
d’un autre contrôleur comme l’exemple du blog.

Dans mon cas, j’ai seulement un formulaire avec des informations (sous
forme de champ texte) et je souhaite intégrer des données “étrangères”
(toujours sous forme de champ texte) ayant le même nom seulement
différencié par un compteur à la fin.

Et le problème concerne le traitement de ces paramètres par le
controleur (personne_0, personne_1)…

Je dois surement être à l’ouest ???


#16

Monseigneur babiben a écrit :

ok merci. Mais j’ai trouvé une solution… Par contre, comment execute
t-on directement du javascript dans ruby sans utiliser un bouton. Par
exemple, j’ai ma fonction bidule déclarée entre les balises

au début de mon code.

Je souhaiterais l’executer dans la page sans avoir à cliqué sur un
lien…

ou alors sur l’evenement load dans ton

Mais c’est du pur JS


Cyril M.
http://blog.shingara.fr


#17

Par contre, comment execute
t-on directement du javascript dans ruby sans utiliser un bouton.

Il n’y a que moi que cette phrase choque?

On ne peut exécuter de javascript dans ruby…Ruby se situant côté
serveur et Javascript côté client.

Ton javascript se trouve dans ta vue ou si tu veux rester propre dans un
fichier js que tu charge.


#18

Tony C. wrote:

Par contre, comment execute
t-on directement du javascript dans ruby sans utiliser un bouton.

Il n’y a que moi que cette phrase choque?

On ne peut exécuter de javascript dans ruby…Ruby se situant côté
serveur et Javascript côté client.

Ton javascript se trouve dans ta vue ou si tu veux rester propre dans un
fichier js que tu charge.
Oui en effet, je m’exprime très mal. C’est vrai que ma phrase n’a aucun
sens. Désolé.