Używam wyliczeń w Railsach 4.1 do śledzenia kolorów wina.
Wine.rb
class Wine < ActiveRecord::Base
enum color: [:red, :white, :sparkling]
end
Moim zdaniem generuję selekcję, aby użytkownik mógł wybrać wino o określonym kolorze
f.input :color, :as => :select, :collection => Wine.colors
Spowoduje to wygenerowanie następującego kodu HTML:
<select id="wine_color" name="wine[color]">
<option value=""></option>
<option value="0">red</option>
<option value="1">white</option>
<option value="2">sparkling</option>
</select>
Jednak po przesłaniu formularza otrzymuję błąd w argumentacji '1' is not a valid color
. Zdaję sobie sprawę, że to dlatego, że color
musi równać się 1
i nie "1"
.
Czy istnieje sposób, aby zmusić Railsy do interpretowania koloru jako liczby całkowitej zamiast łańcucha?
źródło
f.select :color, Wine.colors.to_a.map { |w| [w[0].humanize, w[0]] }
ponieważw
reprezentował tablicę. Nie wiem dlaczego, ale może to komuś pomoże.titleize
może być lepszym pomysłem, jeśli masz dwa lub więcej słówkeys
zwraca tablicę więcto_a
jest zbędne. Alternatywnie, metoda pomocnika select pobiera tablicę 2D dla opcji, więc możesz po prostu użyćto_a
.enum color: [:red, :white, :sparkling]
więc poprawne zdanie tof.input :color, :as => :select, :collection => Wine.color.keys.to_a
Nie ma potrzeby konwertowania wartości skrótu wyliczenia na tablicę z
to_a
. To wystarczy:źródło
Właśnie stworzyłem EnumHelper, który pomyślałem, że mógłbym udostępnić, aby pomóc ludziom, którzy potrzebują bardziej spersonalizowanych etykiet wyliczeniowych i lokalizacji dla wybranych wyliczeń.
W Twoim języku:
W Twoich poglądach:
źródło
[I18n.t("activerecord.enums.#{klass.underscore}.#{enum}.#{key}", default: key.humanize), key]
usuń również ostatnią,humanize
ponieważ może zniekształcać wielkie litery, jeśli zawiera wiele słówZaakceptowane rozwiązanie nie działało dla mnie w przypadku czytelnej dla człowieka , ale udało mi się sprawić, aby działało w następujący sposób:
To był najczystszy, ale naprawdę musiałem uczłowieczyć moje klucze:
źródło
Jeśli używasz wyliczenia w Railsach 4, po prostu zadzwoń
Model.enums
:Aby stworzyć HTML:
Lub dodaj metodę w kontrolerze:
źródło
Oto co zadziałało w moim przypadku, Rails 4+:
w
my _form.html.erb
, mam to:test z konsoli po dodaniu rekordu:
źródło
Jeśli potrzebujesz obsługiwać i18n w oparciu o klucze wyliczeniowe, możesz użyć:
aw tłumaczeniach można ustawić kolory:
źródło
Oto moje rozwiązanie (moje role mają podkreślenia, takie jak „sales_rep”) iz jakiegoś powodu potrzebowałem pustej opcji do pracy (z simpleform?):
W ApplicationHelper:
Następnie w mojej formie:
źródło