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.
Guillaume J. (Guest)
on 2008-10-07 13: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
Michel B. (Guest)
on 2008-10-07 13: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 B.
Guillaume J. (Guest)
on 2008-10-07 14:03
Merci pour ta réponse rapide et détaillée.
Je m'y remet ce soir et je vois ce que ça donne.
Michel B. (Guest)
on 2008-10-07 14:08
(Received via mailing list)
Bon courage, n'hésite pas à poser d'autres questions si tu bloque sur
autre
chose.

--
Michel B.
Guillaume J. (Guest)
on 2008-10-08 09:51
En fait , je voudrais avoir
<select>
...
</select>

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

<%= link_to "LaSuite", :param1 => foo, :param2 => bar, :selection =>
"LaValeurRécupéréeDuSelect" %>
Michel B. (Guest)
on 2008-10-08 10: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 B.
Guillaume BELLEGUIC (Guest)
on 2008-10-08 10: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 B. a écrit :
Michel B. (Guest)
on 2008-10-08 10:21
(Received via mailing list)
Tant qu'il ne veut pas faire de formulaire...

Le 8 octobre 2008 08:13, Guillaume BELLEGUIC
<removed_email_address@domain.invalid>a écrit :

>
>
> >
>


--
Michel B.
Guillaume J. (Guest)
on 2008-10-08 10:40
Michel B. 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é.
Michel B. (Guest)
on 2008-10-08 11: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 B.
This topic is locked and can not be replied to.