asi*_*niy 68

Rails 4.1 现在包含枚举!

你可以写

class User < ActiveRecord::Base
  enum status: [ :admin, :user, :banned ]
end
Run Code Online (Sandbox Code Playgroud)

对于迁移写

t.integer :status
Run Code Online (Sandbox Code Playgroud)

Rails 3和4.0

我认为最好的解决方案是simple_enum gem.

  • 不幸的是,这些值存储为整数而不是ENUM,但有几个缺点:http://hn.meteor.com/posts/6925010-32d11 (3认同)
  • @migu这是rails enum的事实标准.`simple_enum` gem的工作方式相同.查看更新的答案 (2认同)
  • @migu你可以仔细检查一下这个链接 - 我对它非常感兴趣,但对我来说并不适合.:) 谢谢. (2认同)

小智 8

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

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

这将创建具有单列"foobar"和值的表.


Mor*_*rty 5

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

t.column 'role', 'user_role'
Run Code Online (Sandbox Code Playgroud)

我用以下方法创建了枚举类型:

execute "CREATE TYPE user_role AS ENUM ('consultant', 'admin');"
Run Code Online (Sandbox Code Playgroud)

检查数据库:

    Column     |          Type          | Modifiers | Storage  | Stats target | Description
---------------+------------------------+-----------+----------+--------------+-------------
 role          | user_role              |           | plain    |              |
Run Code Online (Sandbox Code Playgroud)