ruby-on-rails - how - ruby docs enumerable
Cómo configurar correctamente las enumeraciones de Rails 4.1 en ActiveAdmin (3)
Tengo una aplicación Rails 4.1 en la que uso una enumeración para representar el nivel de privacidad de un objeto.
En mi esquema:
t.integer "privacy_level", default: 0
En mi modelo:
enum privacy_level: { privacy_private: 0, privacy_trusted: 1, privacy_public: 2 }
En mi archivo de registro 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
En la página de índice ActiveAdmin, funciona muy bien. El nivel de privacidad de cada objeto se muestra como "privacy_private", "privacy_trusted" y "privacy_public".
Sin embargo, cuando trato de editar un objeto, el tipo de entrada es un cuadro numérico con flechas hacia arriba y hacia abajo que me permite colocar cualquier número entero, independientemente de si el número entero es un nivel de privacidad válido (incluso valores negativos).
Lo que me gustaría ver es una entrada desplegable (selección) con los tres valores de cadena enumerados que definí en mi modelo.
Aprovechando la respuesta de Jack, esto es lo que funcionó para mí. Digamos que su modelo ActiveRecord es Tweets
:
f.input :privacy_level, as: :select, collection: Tweet.privacy_levels.keys
Cosas clave a tener en cuenta aquí:
- su ActiveRecord tiene un diccionario útil (disponible en enum_name.pluralize) de enumeración de claves a valores.
- el uso de cadenas (e ignorar la representación de enteros subyacente) hace que sea más fácil escribir en el valor de enumeración.
Para usar las enumeraciones en los filtros de ActiveAdmin use:
filter :level, as: :select, collection: Model.levels
asumiendo un atributo de enum
llamado level
Esto se asegurará de poner realmente el valor entero en la consulta y no el nombre de la clave.
hacer esto:
f.input :privacy_level, :as => :select, :collection => privacy_level.keys.to_a