ruby on rails f.sélectionnez options avec des attributs personnalisés
J'ai un formulaire d'instruction select, comme ceci:
= f.select :country_id, @countries.map{ |c| [c.name, c.id] }
Qui résultats dans ce code:
...
<option value="1">Andorra</option>
<option value="2">Argentina</option>
...
Mais je veux ajouter un attribut HTML à mes options, comme ceci:
...
<option value="1" currency_code="XXX">Andorra</option>
<option value="2" currency_code="YYY">Argentina</option>
...
- Rails de ne pas fournir cette fonctionnalité, vous devez créer un helper pour créer ce balisage. Aussi, gardez à l'esprit que l'exemple que vous avez mentionné n'est pas valide HTML.
- Je le sais, mon exemple n'est pas valide html... je suppose que je dois changer ma façon à obtenir les résultats que je veux, thk!
Vous devez vous connecter pour publier un commentaire.
Rails POUVEZ ajouter des attributs personnalisés pour sélectionner des options, à l'aide de l'existant options_for_select helper. C'est presque ça droit dans le code dans votre question. À l'aide de html5 attributs data -:
L'ajout d'une sélection initiale:
Si vous avez besoin d'regroupés options, vous pouvez utiliser le grouped_options_for_select helper, comme ceci (si @continents est un tableau de continent objets, chacun ayant un pays de la méthode):
De crédit doit aller à paul @ pogodan qui a posté sur la recherche de ce pas dans les docs, mais en lisant les rails de la source. https://web.archive.org/web/20130128223827/http://www.pogodan.com/blog/2011/02/24/custom-html-attributes-in-options-for-select
Vous pouvez le faire comme suit:
Ce n'est pas possible directement avec des Rails, et vous aurez à créer votre propre helper de créer des attributs personnalisés. Cela dit, il y a deux façons différentes d'accomplir ce que vous voulez:
(1) à l'Aide d'un attribut personnalisé nom en HTML5. En HTML5, vous êtes autorisé à avoir les noms d'attribut personnalisé, mais ils doivent être pré-entrée avec 'données'. Ces attributs personnalisés ne sont soumis à votre forme, mais ils peuvent être utilisés pour accéder à vos éléments en Javascript. Si vous voulez accomplir cela, je recommande la création d'un assistant, qui génère des options comme ceci:
(2) à l'Aide de valeurs personnalisées de fractionnement de présenter des données supplémentaires. Si vous souhaitez soumettre la monnaie de code, je vous recommande la création de votre boîte de sélection comme ceci:
Cela devrait générer un code HTML qui ressemble à ceci:
Que vous pouvez ensuite analyser dans votre contrôleur:
Attributs supplémentaires de hachage est pris en charge uniquement dans Rails 3.
Si vous êtes sur Rails 2.x, et souhaitez remplacer
options_for_select
En gros, j'ai juste copié les Rails 3 code. Vous devez remplacer ces 3 méthodes:
Un peu compliqué, mais c'est une option. Je place ce code dans un module d'aide appelé
RailsOverrides
que j'ai ensuite inclure dansApplicationHelper
. Vous pouvez également faire un plugin/gem si vous préférez.Un gotcha est à prendre avantage de ces méthodes, vous devez toujours appeler
options_for_select
directement. Raccourcis commedonnera les résultats. Il devrait plutôt être:
Là encore, pas une solution idéale, mais il pourrait être intéressant de vous rendre à la si les données utiles-attribut.
Je suis tombé sur cette question et a créé le "enhanced_select" Ruby Gem pour résoudre ce problème. Vous pouvez le trouver ici:
https://github.com/bkuhlmann/enhanced_select