如何在Rails 3迁移中描述枚举列?

如何在Rails 3迁移中描述枚举列?

Rails 4.1现在包含枚举 !

你可以写

class User < ActiveRecord::Base enum status: [ :admin, :user, :banned ] end 

为了迁移写

 t.integer :status 

Rails 3&4.0

我认为最好的解决scheme是simple_enum gem。

在Rails 3迁移中,您可以执行以下操作:

 class CreateFoo < ActiveRecord::Migration def change create_table :foo do |t| t.column :foobar, "ENUM('foo', 'bar')" end end end 

这将创build具有单列“foobar”和值的表。

就像是

 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 

我喜欢enumerated_attribute gem: https : //github.com/jeffp/enumerated_attribute

轻松枚举您的模型,对象和视图。

与轨道3.1工作正常

您可以使用以下方式描述枚举列:

 t.column 'role', 'user_role' 

我创build了枚举types:

 execute "CREATE TYPE user_role AS ENUM ('consultant', 'admin');" 

检查数据库:

  Column | Type | Modifiers | Storage | Stats target | Description ---------------+------------------------+-----------+----------+--------------+------------- role | user_role | | plain | | 

我将使用enum_fugem: https : //github.com/ikspres/enum_fu

这也将工作….

add_column :table_name, :column_name, "enum('abc','def','ghi')", :default => 'abc'

我的工作是从符号映射到整数

 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 

但是对于控制器,您必须像这样重新映射它:

  def create @cupon_type = CuponType.new(params[:cupon_type]) @cupon_type.type = params[:cupon_type][:type].to_sym 

注意.to_sym覆盖对象上的第一个创build(在我的情况下,它是优惠券)。

现在你可以像这样使用它:

 c.type == :type_one c.type = :type_two 

看看active_enum 。

我认为这符合你的需求。

使用enum_column将枚举支持添加到活动logging

https://github.com/mdsol/enum_column

 t.enum :file_type ,:limit => [:jpg, :png, :gif] ,:default => :gif