📅  最后修改于: 2023-12-03 15:34:36.610000             🧑  作者: Mango
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
方法可以访问枚举的哈希表,其中键是枚举名称,而值是整数。通过 keys
和 values
方法可以分别获取枚举的名称和值。
你可以通过 default
选项为枚举属性设置默认值。如下所示:
class User < ApplicationRecord
enum role: [:user, :admin], default: :user
end
在上述代码中,我们设置了 role
枚举属性的默认值为 :user
。
通过 Rails Enum,你可以轻松地定义和使用枚举。它使得在 Rails 模型中处理状态和状态转换非常容易。当然,还有很多其他的选项可以定制枚举行为,如加入前缀、后缀等。这些内容可以通过查看官方文档来了解。