Ruby on rails 数据库级别的模型属性数据验证
我想验证用户名不是以下内容之一<代码>[“管理员”、“版主”、“修改者”、“管理员”] 我使用自定义验证器验证这些名称在模型级别是不允许的Ruby on rails 数据库级别的模型属性数据验证,ruby-on-rails,migration,Ruby On Rails,Migration,我想验证用户名不是以下内容之一[“管理员”、“版主”、“修改者”、“管理员”] 我使用自定义验证器验证这些名称在模型级别是不允许的 class User < ActiveRecord::Base ... validate :username_should_not_be def username_should_not_be not_allowed = ["admin", "moderator", "mod", "administrator"] if not_al
class User < ActiveRecord::Base
...
validate :username_should_not_be
def username_should_not_be
not_allowed = ["admin", "moderator", "mod", "administrator"]
if not_allowed.include?(username.downcase)
error.add(:username, "is not allowed.")
end
end
...
end
class用户
我想知道我是否可以在数据库级别验证这一点(可能使用迁移文件?)。是否可以针对上述特定情况执行此操作
这种做法似乎也受到了政府的鼓励
在数据库级别使用一些约束可能是个好主意。
此外,数据库级验证可以安全地处理某些事情
(例如在大量使用的表中的唯一性)这可能很难
否则执行
您可以使用mv postgresql gem for postgresql和mv sqlite gem for sqlite来实现。这两个gem都是迁移验证程序项目的组成部分(请参见此处的详细信息: 使用该gem,您可以在db级别定义验证。在您的情况下:
def up
验证:用户,:用户名,
排除:[“管理员”、“版主”、“修改人”、“管理员”]
结束
降下
验证:用户,:用户名,排除:false
结束
然后您(最好)将该验证传播到您的模型:
class用户
因此:
User.new(用户名:“admin”)。有效吗?
=>错误
User.new(用户名:“jasoki”)。有效吗?
=>正确
我自己还没有尝试过这一点,但这可能会有所帮助:您使用的是什么数据库?在dev上使用sqlite,在prod上使用postgresql