我正在尝试创建一个简单的RoR应用程序。我遇到了用户类别的枚举问题。
class User < ApplicationRecord
before_save :name_to_sentence_case
extend Enumerize
enumerize :category, in: [:admin, :staff, :customer]
VALID_NAME_REGEX = /\A[a-z]+\z/i
VALID_PHONE_REGEX = /\A[0-9]+\z/
validates :first_name, presence: true, length: {maximum: 20}, format: {with: VALID_NAME_REGEX}
validates :last_name, presence: true, length: {maximum: 30}, format: {with: VALID_NAME_REGEX}
validates :category, presence: true
validates :password, presence: true, length: {minimum: 6}
validates :phone, presence: true, length: {maximum: 15}, uniqueness: true, format: {with: VALID_PHONE_REGEX}
has_secure_password
def name_to_sentence_case
self.first_name = first_name.humanize
self.last_name = last_name.humanize
end
end
我可以从rails控制台创建用户并根据指定的类别设置类别,系统将不允许创建具有其他类别的用户。但是,即使存在正确的类别,我也无法更新现有用户的类别。
答案 0 :(得分:0)
更好的方法是创建哈希。所以你只需更新一个数值。 例如
CATEGORY = {
0 => 'admin',
1 => 'staff',
2 => 'customer'
}
您只需将值数值存储在数据库(0,1或2)中,您就可以从哈希中知道它是谁。
答案 1 :(得分:0)
Rails内置了enum
帮助器。根据{{3}},您可以通过下一种方式使用它:
:
enum category: [:admin, :staff, :customer]
您的category
字段应为整数类型或
enum category: { admin: :admin, staff: :staff, customer: :customer }
如果你想要字符串类型字段
比您可以用非常简单的方式更新user
@user.admin!
答案 2 :(得分:0)
要详细说明Oleg's答案,您将能够将可枚举选项作为字符串传递给参数,即
@user.update(phone: "123-234-1234", category: 'admin')
或类别
@user.update(phone: "123-234-1234", category: :admin)
的第21,22行