Forum: Rails France select et link_to

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
F83919d17c66c293976e502e07837642?d=identicon&s=25 Guillaume J. (niber)
on 2008-10-07 11:28
Bonjour,

dans une vue, comment faire pour passer en paramètre à link_to un item
choisi dans un menu déroulant?

Il n'y a pas de "form" dans la page.

Merci de votre aide
047a4fc673336a70a6b58338bc6d677d?d=identicon&s=25 Michel Belleville (Guest)
on 2008-10-07 11:48
(Received via mailing list)
Tu ne peux passer des paramètres à link_to que côté-serveur, or la
selection
se fait côté client.

Donc 2 solutions : soit tu fais un form et un petit peut de JavaScript
pour
régir à la sélection d'un élément de la liste, soit tu fais pas de form
et
un peu plus de JavaScript pour réagir à la sélection de la liste *et*
faire
ton call.

Maintenant, si la 2° solution te plait (moi elle me plait) voilà comment
je
procèderais pour garder les avantages du link_to et de la route générée
par
Rails :
Au lieu de faire ton formulaire comme ça :

...
<select id="liste_deroulante">
<% foreach item in list -%>
  <option value="<%= item.id %>"><% item.name %></option>
<% end -%>
</select>
...

Je ferais :

...
<select id="liste_deroulante">
<% foreach item in list -%>
  <option value="<%= link_to item %>"><% item.name %></option>
<% end -%>
</select>
<script>
$('liste_deroulante').observe('change', function(event) {
  document.location.href = $F(event.element());
  event.stop();
});
</script>
...

Décryptage : tu mets dans la value des options de ton select les liens
entiers, puis tu fais surveiller un changement de valeur du select pour
envoyer le navigateur client à l'adresse de l'élément sélectionné.

L'autre solution marcherait aussi, mais elle me semble plus compliquée
(par
contre elle pourrait avoir l'avantage de marcher même si le javascript
est
désactivé ; en admettant que des gens désactivent encore leur
JavaScript).

--
Michel Belleville
F83919d17c66c293976e502e07837642?d=identicon&s=25 Guillaume J. (niber)
on 2008-10-07 12:03
Merci pour ta réponse rapide et détaillée.
Je m'y remet ce soir et je vois ce que ça donne.
047a4fc673336a70a6b58338bc6d677d?d=identicon&s=25 Michel Belleville (Guest)
on 2008-10-07 12:08
(Received via mailing list)
Bon courage, n'hésite pas à poser d'autres questions si tu bloque sur
autre
chose.

--
Michel Belleville
F83919d17c66c293976e502e07837642?d=identicon&s=25 Guillaume J. (niber)
on 2008-10-08 07:51
En fait , je voudrais avoir
<select>
...
</select>

<script>
function(){...}
</script>

<%= link_to "LaSuite", :param1 => foo, :param2 => bar, :selection =>
"LaValeurRécupéréeDuSelect" %>
047a4fc673336a70a6b58338bc6d677d?d=identicon&s=25 Michel Belleville (Guest)
on 2008-10-08 08:04
(Received via mailing list)
Ca tu ne peux pas vraiment, ou alors ça va être très difficile. Le ruby
est
exécuté lorsque la page est générée, donc avant qu'elle soit envoyée à
l'utilisateur, donc avant que l'utilisateur ait choisi l'élément qu'il
veut
dans la liste select.

--
Michel Belleville
5183febd0dfb911f94c270ddd174fe71?d=identicon&s=25 Guillaume BELLEGUIC (Guest)
on 2008-10-08 08:14
(Received via mailing list)
bonjour,

tu peux faire un formulaire, avec un bouton étape suivante, tu envoie
donc le paramètre du select.
sinon toujours un formulaire un lien qui appel une fonction javascript
qui lit les valeurs à envoyer et envoie un formulaire (un peut comme
le destroy de rails).

Le 8 oct. 08 à 08:04, Michel Belleville a écrit :
047a4fc673336a70a6b58338bc6d677d?d=identicon&s=25 Michel Belleville (Guest)
on 2008-10-08 08:21
(Received via mailing list)
Tant qu'il ne veut pas faire de formulaire...

Le 8 octobre 2008 08:13, Guillaume BELLEGUIC
<guillaume.belleguic@gmail.com>a écrit :

>
>
> >
>


--
Michel Belleville
F83919d17c66c293976e502e07837642?d=identicon&s=25 Guillaume J. (niber)
on 2008-10-08 08:40
Michel Belleville wrote:
> Tant qu'il ne veut pas faire de formulaire...

Va pour un formulaire alors...
Là, normalement, je sais faire.

Encore merci pour votre réactivité.
047a4fc673336a70a6b58338bc6d677d?d=identicon&s=25 Michel Belleville (Guest)
on 2008-10-08 09:39
(Received via mailing list)
Effectivement c'est la solution qui me semble la plus simple, cohérente
et
élégante dans cette situation.

--
Michel Belleville
This topic is locked and can not be replied to.