Mam formularz wyboru oświadczenia, taki jak ten:
= f.select :country_id, @countries.map{ |c| [c.name, c.id] }
Co daje ten kod:
...
<option value="1">Andorra</option>
<option value="2">Argentina</option>
...
Ale chcę dodać niestandardowy atrybut HTML do moich opcji, na przykład:
...
<option value="1" currency_code="XXX">Andorra</option>
<option value="2" currency_code="YYY">Argentina</option>
...
ruby-on-rails
select
attributes
el_quick
źródło
źródło
Odpowiedzi:
Railsy MOGĄ dodawać niestandardowe atrybuty do wybierania opcji, używając istniejącego helpera options_for_select. Prawie udało Ci się to znaleźć w kodzie pytania. Korzystanie z atrybutów danych html5:
Dodanie wstępnej selekcji:
Jeśli potrzebujesz zgrupowanych opcji, możesz użyć pomocnika grouped_options_for_select, w ten sposób (jeśli @continents jest tablicą obiektów kontynentów, z których każdy ma metodę krajów):
Podziękowania należy się paul @ pogodan, który opublikował informację o znalezieniu tego nie w dokumentach, ale czytając źródło rails. https://web.archive.org/web/20130128223827/http://www.pogodan.com/blog/2011/02/24/custom-html-attributes-in-options-for-select
źródło
Możesz to zrobić w następujący sposób:
źródło
Nie jest to możliwe bezpośrednio w Railsach i będziesz musiał stworzyć własnego pomocnika do tworzenia niestandardowych atrybutów. To powiedziawszy, prawdopodobnie istnieją dwa różne sposoby osiągnięcia tego, co chcesz:
(1) Używanie niestandardowej nazwy atrybutu w HTML5. W HTML5 możesz mieć niestandardowe nazwy atrybutów , ale muszą one być poprzedzone znakiem „data-”. Te atrybuty niestandardowe nie zostaną przesłane wraz z formularzem, ale można ich użyć do uzyskania dostępu do elementów w JavaScript. Jeśli chcesz to osiągnąć, polecam stworzenie pomocnika, który generuje takie opcje:
(2) Używanie wartości z niestandardowym podziałem do przesyłania dodatkowych danych. Jeśli faktycznie chcesz przesłać kod waluty, polecam utworzenie pola wyboru w następujący sposób:
Powinno to wygenerować kod HTML, który wygląda następująco:
Które możesz następnie przeanalizować w kontrolerze:
źródło
Funkcja mieszania dodatkowych atrybutów jest obsługiwana tylko w Railsach 3.
Jeśli korzystasz z Rails 2.x i chcesz przesłonić
options_for_select
Po prostu skopiowałem kod Rails 3. Musisz zastąpić te 3 metody:
Trochę niechlujne, ale to opcja. Umieszczam ten kod w module pomocniczym o nazwie,
RailsOverrides
który następnie dołączam doApplicationHelper
. Jeśli wolisz, możesz także zrobić wtyczkę / klejnot.Jedna trudność polega na tym, że aby skorzystać z tych metod, należy zawsze wywoływać
options_for_select
bezpośrednio. Skróty takie jakprzyniesie stare rezultaty. Zamiast tego powinno być:
Ponownie nie jest to świetne rozwiązanie, ale warto sięgnąć do zawsze tak użytecznego atrybutu danych.
źródło
Natknąłem się również na ten problem i utworzyłem Ruby Gem „Enhanced_select”, aby rozwiązać ten problem. Znajdziesz go tutaj:
https://github.com/bkuhlmann/enhanced_select
źródło