Ich habe eine Formularauswahlanweisung wie folgt:
= f.select :country_id, @countries.map{ |c| [c.name, c.id] }
Was zu diesem Code führt:
...
<option value="1">Andorra</option>
<option value="2">Argentina</option>
...
Ich möchte meinen Optionen jedoch ein benutzerdefiniertes HTML-Attribut hinzufügen:
...
<option value="1" currency_code="XXX">Andorra</option>
<option value="2" currency_code="YYY">Argentina</option>
...
ruby-on-rails
select
attributes
el_quick
quelle
quelle
Antworten:
Schienen KÖNNEN benutzerdefinierte Attribute hinzufügen, um Optionen auszuwählen, indem der vorhandene Hilfsprogramm options_for_select verwendet wird. Sie hatten es fast richtig im Code in Ihrer Frage. Verwenden von HTML5-Datenattributen:
Hinzufügen einer ersten Auswahl:
Wenn Sie gruppierte Optionen benötigen, können Sie den Helfer grouped_options_for_select wie folgt verwenden (wenn @continents ein Array von Kontinentobjekten ist, die jeweils eine Ländermethode haben):
Der Kredit sollte an paul @ pogodan gehen, der darüber geschrieben hat, dass dies nicht in den Dokumenten, sondern durch Lesen der Rails-Quelle gefunden wurde. https://web.archive.org/web/20130128223827/http://www.pogodan.com/blog/2011/02/24/custom-html-attributes-in-options-for-select
quelle
Sie können dies wie folgt tun:
quelle
Dies ist nicht direkt mit Rails möglich, und Sie müssen Ihren eigenen Helfer erstellen, um die benutzerdefinierten Attribute zu erstellen. Das heißt, es gibt wahrscheinlich zwei verschiedene Möglichkeiten, um das zu erreichen, was Sie wollen:
(1) Verwenden eines benutzerdefinierten Attributnamens in HTML5. In HTML5 dürfen Sie benutzerdefinierte Attributnamen haben , denen jedoch 'data-' vorangestellt werden muss. Diese benutzerdefinierten Attribute werden nicht mit Ihrem Formular gesendet, können jedoch für den Zugriff auf Ihre Elemente in Javascript verwendet werden. Wenn Sie dies erreichen möchten, würde ich empfehlen, einen Helfer zu erstellen, der folgende Optionen generiert:
(2) Verwenden von Werten mit benutzerdefinierter Aufteilung, um zusätzliche Daten zu übermitteln. Wenn Sie den Währungscode tatsächlich einreichen möchten, würde ich empfehlen, Ihr Auswahlfeld wie folgt zu erstellen:
Dies sollte HTML generieren, das so aussieht:
Was Sie dann in Ihrem Controller analysieren können:
quelle
Der zusätzliche Attribut-Hash wird nur in Rails 3 unterstützt.
Wenn Sie sich auf Rails 2.x befinden und überschreiben möchten
options_for_select
Ich habe im Grunde nur den Rails 3-Code kopiert. Sie müssen diese 3 Methoden überschreiben:
Ein bisschen chaotisch, aber es ist eine Option. Ich platziere diesen Code in einem Hilfsmodul namens,
RailsOverrides
das ich dann einbindeApplicationHelper
. Sie können auch ein Plugin / Gem erstellen, wenn Sie dies bevorzugen.Um diese Methoden nutzen zu können, müssen Sie immer
options_for_select
direkt aufrufen . Verknüpfungen wiewird die alten Ergebnisse liefern. Stattdessen sollte es sein:
Wieder keine großartige Lösung, aber es könnte sich lohnen, zu dem noch so nützlichen Datenattribut zu gelangen.
quelle
Ich bin auch auf dieses Problem gestoßen und habe den Ruby Gem "Enhanced_select" erstellt, um dieses Problem zu lösen. Sie finden es hier:
https://github.com/bkuhlmann/enhanced_select
quelle