📜  rails enum (1)

📅  最后修改于: 2023-12-03 15:34:36.610000             🧑  作者: Mango

Rails Enum

Rails Enum 使得在 Rails 模型中定义枚举变得非常容易,它允许你通过 Ruby 枚举类指定一组可选的值。

定义枚举

在 Rails 模型中,可以通过 enum 关键字定义枚举。假设我们有一个 User 模型,并且想要在 User 模型中定义一个名为 role 的枚举,可以在模型中添加以下代码:

class User < ApplicationRecord
  enum role: [:user, :admin]
end

在上面的代码中,enum 方法接收一个哈希表作为参数,其中键是枚举名称,而值是一个数组,包含了该枚举的所有可选值。

在此例中,我们定义了名为 role 的枚举,其可选值为 :user:admin

使用枚举

定义了枚举之后,你可以在模型对象中使用这个枚举。在上面的例子中,你可以按以下方式使用 role 枚举:

user = User.new(role: :admin)
user.admin? # => true
user.role  # => "admin"
user.role = "user"
user.user?  # => true
user.admin? # => false

在上述代码中,我们使用 new 方法创建了一个新的 User 对象,并将 role 属性设置为 :admin。然后我们使用 admin? 方法检查 role 是否设置为 :admin,以及使用 role 属性访问 role 的值。最后,我们将 role 值更改为 :user 并使用 user? 检查其是否设置为 :user

使用枚举常量

定义枚举之后,Rails 会自动生成一组常量,可以在你的代码中使用。在上面的例子中,我们定义了 role 枚举,那么 Rails 将为我们定义以下常量:

User.roles  # => {"user"=>0, "admin"=>1}
User.roles.keys   # => ["user", "admin"]
User.roles.values # => [0, 1]

通过 User.roles 方法可以访问枚举的哈希表,其中键是枚举名称,而值是整数。通过 keysvalues 方法可以分别获取枚举的名称和值。

设置默认值

你可以通过 default 选项为枚举属性设置默认值。如下所示:

class User < ApplicationRecord
  enum role: [:user, :admin], default: :user
end

在上述代码中,我们设置了 role 枚举属性的默认值为 :user

总结

通过 Rails Enum,你可以轻松地定义和使用枚举。它使得在 Rails 模型中处理状态和状态转换非常容易。当然,还有很多其他的选项可以定制枚举行为,如加入前缀、后缀等。这些内容可以通过查看官方文档来了解。