Eu tenho uma declaração de seleção de formulário, como esta:
= f.select :country_id, @countries.map{ |c| [c.name, c.id] }
O que resulta neste código:
...
<option value="1">Andorra</option>
<option value="2">Argentina</option>
...
Mas eu quero adicionar um atributo HTML personalizado às minhas opções, como este:
...
<option value="1" currency_code="XXX">Andorra</option>
<option value="2" currency_code="YYY">Argentina</option>
...
ruby-on-rails
select
attributes
el_quick
fonte
fonte
Respostas:
Rails PODEM adicionar atributos personalizados para selecionar opções, usando o helper options_for_select existente. Você quase acertou no código da sua pergunta. Usando atributos de dados html5:
Adicionando uma seleção inicial:
Se precisar de opções agrupadas, você pode usar o auxiliar grouped_options_for_select, como este (se @continents for uma matriz de objetos de continente, cada um tendo um método de países):
O crédito deve ir para paul @ pogodan, que postou sobre como encontrar isso não na documentação, mas lendo a fonte do rails. https://web.archive.org/web/20130128223827/http://www.pogodan.com/blog/2011/02/24/custom-html-attributes-in-options-for-select
fonte
Você pode fazer isso da seguinte maneira:
fonte
Isso não é possível diretamente com Rails, e você terá que criar seu próprio helper para criar os atributos personalizados. Dito isso, provavelmente existem duas maneiras diferentes de realizar o que você deseja:
(1) Usando um nome de atributo personalizado em HTML5. Em HTML5, você pode ter nomes de atributos personalizados , mas eles devem ser pré-pendurados com 'data-'. Esses atributos personalizados não serão enviados com seu formulário, mas podem ser usados para acessar seus elementos em Javascript. Se você quiser fazer isso, recomendo criar um auxiliar que gere opções como estas:
(2) Uso de valores com divisão personalizada para enviar dados adicionais. Se você realmente deseja enviar o código da moeda, recomendo criar sua caixa de seleção como esta:
Isso deve gerar um HTML parecido com este:
Que você pode analisar em seu controlador:
fonte
O hash de atributos extras só é suportado no Rails 3.
Se você está no Rails 2.x , e deseja substituir
options_for_select
Basicamente, apenas copiei o código do Rails 3. Você precisa substituir estes 3 métodos:
Meio confuso, mas é uma opção. Coloco esse código em um módulo auxiliar chamado, o
RailsOverrides
qual incluo emApplicationHelper
. Você também pode fazer um plugin / gem se preferir.Uma pegadinha é que, para tirar proveito desses métodos, você deve sempre invocar
options_for_select
diretamente. Atalhos comoproduzirá os resultados antigos. Em vez disso, deveria ser:
Novamente, não é uma ótima solução, mas pode valer a pena chegar ao sempre tão útil atributo de dados.
fonte
Também encontrei esse problema e criei o Ruby Gem "Enhanced_select" para resolvê-lo. Você pode encontrá-lo aqui:
https://github.com/bkuhlmann/enhanced_select
fonte