【问题标题】:Using validate_uniqueness in Rails 4在 Rails 4 中使用验证唯一性
【发布时间】:2017-07-02 18:34:00
【问题描述】:

我添加了另一个填写设计的登录名,即contact_no。电子邮件地址或联系电话。应提供。为了使 contact_no 独一无二,我在我的用户模型中添加了一个检查唯一性。

validates_uniqueness_of :contact_no, allow_nil: true, allow_blank: true

但是,它总是抛出错误

Mysql2::Error: Duplicate entry '' for key 'index_users_on_contact_no':

【问题讨论】:

  • 尝试删除allow_nil: true

标签: ruby-on-rails ruby-on-rails-4 devise


【解决方案1】:

这是因为allow_blank: true

参考这个answer

MySql 唯一索引允许多个 NULL 值(如果列是 NULLable),但是在您的情况下,您将 allow_blank 设置为 true,这会导致将多个空字符串 "" 插入到表中,这会导致该错误

您可以通过删除allow_blank: true 并在其空白时手动将contact_no 设置为nil 来解决此问题

例如:

# user.rb  
after_initialize :set_default, unless: persisted?

def set_default
   self.contact_no = nil if contact_no.nil? || contact_no.blank?
end

【讨论】:

  • 是的!我有点困惑allow_nil
  • 好的。我会尝试并回复您。
猜你喜欢
  • 2014-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-03
相关资源
最近更新 更多