Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 数据库级别的模型属性数据验证_Ruby On Rails_Migration - Fatal编程技术网

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