У меня есть оператор выбора формы, например:
= f.select :country_id, @countries.map{ |c| [c.name, c.id] }
В результате получается этот код:
...
<option value="1">Andorra</option>
<option value="2">Argentina</option>
...
Но я хочу добавить в свои параметры настраиваемый атрибут HTML, например:
...
<option value="1" currency_code="XXX">Andorra</option>
<option value="2" currency_code="YYY">Argentina</option>
...
ruby-on-rails
select
attributes
el_quick
источник
источник
Ответы:
Rails МОЖЕТ добавлять настраиваемые атрибуты для выбора параметров, используя существующий помощник options_for_select. Вы почти правильно указали код в своем вопросе. Использование атрибутов данных html5:
Добавление первоначального выбора:
Если вам нужны сгруппированные параметры, вы можете использовать помощник grouped_options_for_select, например (если @continents - это массив объектов континентов, каждый из которых имеет метод стран):
Следует отдать должное paul @ pogodan, который сообщил о том, что нашел это не в документации, а прочитав исходный код rails. https://web.archive.org/web/20130128223827/http://www.pogodan.com/blog/2011/02/24/custom-html-attributes-in-options-for-select
источник
Вы можете сделать это следующим образом:
источник
Это невозможно напрямую с Rails, и вам придется создать свой собственный помощник для создания настраиваемых атрибутов. Тем не менее, вероятно, есть два разных способа добиться того, чего вы хотите:
(1) Использование имени настраиваемого атрибута в HTML5. В HTML5 вам разрешено иметь собственные имена атрибутов , но они должны быть предварены 'data-'. Эти настраиваемые атрибуты не будут отправлены вместе с вашей формой, но их можно использовать для доступа к вашим элементам в Javascript. Если вы хотите добиться этого, я бы рекомендовал создать помощник, который генерирует такие параметры:
(2) Использование значений с настраиваемым разделением для отправки дополнительных данных. Если вы действительно хотите отправить код валюты, я бы рекомендовал создать поле выбора следующим образом:
Это должно сгенерировать HTML, который выглядит следующим образом:
Что вы затем можете проанализировать в своем контроллере:
источник
Хеш дополнительных атрибутов поддерживается только в Rails 3.
Если вы используете Rails 2.x и хотите переопределить
options_for_select
Я просто скопировал код Rails 3. Вам необходимо переопределить эти 3 метода:
Довольно грязно, но это вариант. Я помещаю этот код во вспомогательный модуль,
RailsOverrides
который затем включаюApplicationHelper
. Вы также можете сделать плагин / гем, если хотите.Одна проблема заключается в том, что для использования этих методов вы всегда должны вызывать их
options_for_select
напрямую. Горячие клавиши вродедаст старые результаты. Вместо этого должно быть:
Опять же, не лучшее решение, но, возможно, стоит добраться до столь полезного атрибута данных.
источник
Я тоже столкнулся с этой проблемой и создал Ruby Gem «расширенный_выбор», чтобы решить эту проблему. Вы можете найти это здесь:
https://github.com/bkuhlmann/enhanced_select
источник