ruby - migraciones - migracion en rails
¿Cómo describo una columna de enumeración en una migración de Rails 3? (11)
¿Cómo describo una columna de enumeración en una migración de Rails 3?
¡Rails 4.1 contiene enum por ahora!
Puedes escribir solo
class User < ActiveRecord::Base
enum status: [ :admin, :user, :banned ]
end
Para la migración escriba
t.integer :status
Carriles 3 y 4.0
La mejor solución en mi opinión es simple_enum gem.
Algo como
class User < ActiveRecord::Base
validates_inclusion_of :status, :in => [:active, :inactive]
def status
read_attribute(:status).to_sym
end
def status= (value)
write_attribute(:status, value.to_s)
end
end
Eche un vistazo a active_enum .
Creo que se ajusta a tus necesidades.
En una migración de Rails 3 puede hacer lo siguiente:
class CreateFoo < ActiveRecord::Migration
def change
create_table :foo do |t|
t.column :foobar, "ENUM(''foo'', ''bar'')"
end
end
end
Esto creará la tabla con la columna única "foobar" y los valores.
Esto también funcionará ...
add_column :table_name, :column_name, "enum(''abc'',''def'',''ghi'')", :default => ''abc''
Lo que funcionó para mí fue mapearlo de símbolos a enteros
TYPE_MAP = { type_one: 1, type_two:2, another_type:3 }
def type
TYPE_MAP.key(read_attribute(:type))
end
def type=(s)
write_attribute(:type, TYPE_MAP[s])
end
Pero para el controlador tienes que mapearlo de nuevo así:
def create
@cupon_type = CuponType.new(params[:cupon_type])
@cupon_type.type = params[:cupon_type][:type].to_sym
Tenga en cuenta el .to_sym que anula la primera creación en el objeto (en mi caso eran cupones).
Ahora puedes usarlo así:
c.type == :type_one
c.type = :type_two
Me gusta la variable enumerated_attribute : https://github.com/jeffp/enumerated_attribute
Enum fácil para tus modelos, objetos y vistas.
Funciona bien con rieles 3.1
Puede describir una columna de enumeración con:
t.column ''role'', ''user_role''
Creé el tipo de enumeración con:
execute "CREATE TYPE user_role AS ENUM (''consultant'', ''admin'');"
Inspeccionando la base de datos:
Column | Type | Modifiers | Storage | Stats target | Description
---------------+------------------------+-----------+----------+--------------+-------------
role | user_role | | plain | |
Usaré la gema enum_fu: https://github.com/ikspres/enum_fu
Use enum_column para agregar soporte enum al registro activo
t.enum :file_type ,:limit => [:jpg, :png, :gif] ,:default => :gif