J'ai une instruction de sélection de formulaire, comme celle-ci:
= f.select :country_id, @countries.map{ |c| [c.name, c.id] }
Ce qui aboutit à ce code:
...
<option value="1">Andorra</option>
<option value="2">Argentina</option>
...
Mais je souhaite ajouter un attribut HTML personnalisé à mes options, comme ceci:
...
<option value="1" currency_code="XXX">Andorra</option>
<option value="2" currency_code="YYY">Argentina</option>
...
ruby-on-rails
select
attributes
el_quick
la source
la source
Réponses:
Les rails PEUVENT ajouter des attributs personnalisés pour sélectionner des options, en utilisant l'assistant options_for_select existant. Vous aviez presque tout compris dans le code de votre question. Utilisation des attributs de données html5:
Ajout d'une sélection initiale:
Si vous avez besoin d'options groupées, vous pouvez utiliser l'assistant grouped_options_for_select, comme ceci (si @continents est un tableau d'objets continent, chacun ayant une méthode pays):
Le crédit devrait aller à paul @ pogodan qui a écrit sur le fait de trouver cela non pas dans la documentation, mais en lisant la source des rails. https://web.archive.org/web/20130128223827/http://www.pogodan.com/blog/2011/02/24/custom-html-attributes-in-options-for-select
la source
Vous pouvez le faire comme suit:
la source
Cela n'est pas possible directement avec Rails, et vous devrez créer votre propre assistant pour créer les attributs personnalisés. Cela dit, il existe probablement deux façons différentes d'accomplir ce que vous voulez:
(1) Utilisation d'un nom d'attribut personnalisé en HTML5. En HTML5, vous êtes autorisé à avoir des noms d'attributs personnalisés , mais ils doivent être précédés de «data-». Ces attributs personnalisés ne seront pas soumis avec votre formulaire, mais ils peuvent être utilisés pour accéder à vos éléments en Javascript. Si vous souhaitez accomplir cela, je vous recommande de créer un assistant qui génère des options comme celle-ci:
(2) Utilisation de valeurs avec fractionnement personnalisé pour soumettre des données supplémentaires. Si vous souhaitez réellement soumettre le code de devise, je vous recommande de créer votre boîte de sélection comme ceci:
Cela devrait générer du HTML qui ressemble à ceci:
Que vous pouvez ensuite analyser dans votre contrôleur:
la source
Le hachage d'attributs supplémentaires n'est pris en charge que dans Rails 3.
Si vous êtes sur Rails 2.x et que vous souhaitez remplacer
options_for_select
Je viens de copier le code de Rails 3. Vous devez remplacer ces 3 méthodes:
Un peu désordonné mais c'est une option. Je place ce code dans un module d'aide appelé
RailsOverrides
que j'inclus ensuiteApplicationHelper
. Vous pouvez également créer un plugin / gem si vous préférez.Un inconvénient est que pour tirer parti de ces méthodes, vous devez toujours appeler
options_for_select
directement. Raccourcis commedonnera les anciens résultats. Au lieu de cela, il devrait être:
Encore une fois, ce n'est pas une excellente solution, mais cela vaut peut-être la peine d'accéder à l'attribut data toujours aussi utile.
la source
J'ai également rencontré ce problème et j'ai créé le Ruby Gem "Enhanced_select" pour résoudre ce problème. Vous pouvez le trouver ici:
https://github.com/bkuhlmann/enhanced_select
la source