如何防止属性成为某个值?

时间:2016-11-28 01:56:00

标签: ruby-on-rails validation

我有一个名为“User”的模型,其属性为“Username”。我可以使用验证来阻止使用用户名“home”创建用户吗?

class User < ActiveRecord::Base
  validates :username, presence: true
end

1 个答案:

答案 0 :(得分:2)

您可以使用exclusion validator

class User < ActiveRecord::Base
  USERNAME_BLACKLIST = ['home'].freeze

  validates :username, presence: true, exclusion: { in: USERNAME_BLACKLIST }
end

或者,对于使用内置验证器不易表达的更复杂的验证类型,您始终可以使用validate而非validates依赖自定义验证方法:

class User < ActiveRecord::Base
  validates :username, presence: true

  validate :username_not_on_restricted_list

  protected

  def username_not_on_restricted_list
    errors.add(:username, :invalid) if username == 'home'
  end
end

如果您打算在多个模型中重复使用此功能,也可以编写custom validator