Ich verwende die Aufzählungen in Rails 4.1, um die Farben des Weins zu verfolgen.
Wine.rb
class Wine < ActiveRecord::Base
enum color: [:red, :white, :sparkling]
end
Aus meiner Sicht generiere ich eine Auswahl, damit der Benutzer einen Wein mit einer bestimmten Farbe auswählen kann
f.input :color, :as => :select, :collection => Wine.colors
Dies generiert den folgenden HTML-Code:
<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>
Beim Absenden des Formulars erhalte ich jedoch einen Argumentationsfehler '1' is not a valid color
. Mir ist klar, dass dies daran liegt, dass color
es gleich sein muss 1
und nicht "1"
.
Gibt es eine Möglichkeit, Rails zu zwingen, die Farbe als Ganzzahl und nicht als Zeichenfolge zu interpretieren?
quelle
f.select :color, Wine.colors.to_a.map { |w| [w[0].humanize, w[0]] }
weil esw
ein Array darstellte. Ich weiß nicht warum, aber vielleicht hilft das jemandem.titleize
könnte eine bessere Idee sein, wenn Sie zwei oder mehr Wörter habenkeys
Methode gibt ein Array zurück, sodass dasto_a
redundant ist. Alternativ verwendet die Select-Helper-Methode ein 2D-Array für Optionen, die Sie einfach verwenden könnento_a
.enum color: [:red, :white, :sparkling]
daher lautet der richtige Satzf.input :color, :as => :select, :collection => Wine.color.keys.to_a
Es ist nicht erforderlich, den Enum-Hash in ein Array mit zu konvertieren
to_a
. Das reicht aus:quelle
Ich habe gerade einen EnumHelper zusammengestellt, den ich teilen möchte, um Menschen zu helfen, die individuellere Enum-Labels und Gebietsschemas für Ihre Enum-Auswahl benötigen.
In Ihrem Gebietsschema:
In Ihren Ansichten:
quelle
[I18n.t("activerecord.enums.#{klass.underscore}.#{enum}.#{key}", default: key.humanize), key]
Entfernen Sie auch den letzten,humanize
da dies die Großschreibung verzerren kann, wenn mehrere Wörter vorhanden sindDie akzeptierte Lösung funktionierte für mich für den Menschen nicht lesbar , aber ich konnte sie so zum Laufen bringen:
Dies war das sauberste, aber ich musste meine Schlüssel wirklich humanisieren:
quelle
Wenn Sie in Rails 4 enum verwenden, rufen Sie einfach an
Model.enums
:So erstellen Sie HTML:
Oder fügen Sie eine Methode im Controller hinzu:
quelle
Folgendes hat bei mir funktioniert, Rails 4+:
in habe
my _form.html.erb
ich das:Test von der Konsole nach dem Hinzufügen eines Datensatzes:
quelle
Wenn Sie den i18n basierend auf den Aufzählungstasten handhaben müssen, können Sie Folgendes verwenden:
und in den Übersetzungen können Sie die Farben einstellen:
quelle
Hier ist meine Lösung (meine Rollen haben Unterstriche wie "sales_rep"), und aus irgendeinem Grund musste ich eine leere Option zum Arbeiten bekommen (mit einfacher Form?):
In ApplicationHelper:
Dann in meiner Form:
quelle