Как правильно настроить перечисления Rails 4.1 в ActiveAdmin
У меня есть приложение Rails 4.1, в котором я использую перечисление для представления уровня конфиденциальности объекта.
В моей схеме:
t.integer "privacy_level", default: 0
В моей модели:
enum privacy_level: { privacy_private: 0, privacy_trusted: 1, privacy_public: 2 }
В моем файле реестра ActiveAdmin:
index do
column :privacy_level
default_actions
end
form do |f|
f.inputs "Edit My Model" do
f.input :privacy_level
end
f.actions
end
На странице индекса ActiveAdmin он отлично работает. Уровень конфиденциальности каждого объекта отображается как "privacy_private", "privacy_trusted"и " privacy_public".
Однако, когда я пытаюсь отредактировать объект, тип ввода-это числовое поле со стрелками вверх и вниз, которые позволяют мне чтобы поместить любое целое число, независимо от того, является ли целое число допустимым уровнем конфиденциальности (даже отрицательные значения).
То, что я хотел бы видеть, - это выпадающий (select) вход с тремя перечисленными строковыми значениями, которые я определил в своей модели.
3 ответа:
Основываясь на ответе Джека, вот что сработало для меня. Допустим, ваша модель ActiveRecord
Tweets
:
f.input :privacy_level, as: :select, collection: Tweet.privacy_levels.keys
Ключевые вещи, которые следует отметить здесь:
- Ваш ActiveRecord имеет полезный словарь (доступен по адресу enum_name.pluralize) перечисления ключей к значениям.
- использование строк (и игнорирование базового целочисленного представления) облегчает запись в значение enum.