Ruby on rails 在Rails 4中使用validate_唯一性
我已在Desive中添加了另一个登录名,即联系人号码。应提供电子邮件地址或联系人号码。为了使联系人没有唯一性,我在我的用户模型中添加了一个唯一性检查Ruby on rails 在Rails 4中使用validate_唯一性,ruby-on-rails,ruby-on-rails-4,devise,Ruby On Rails,Ruby On Rails 4,Devise,我已在Desive中添加了另一个登录名,即联系人号码。应提供电子邮件地址或联系人号码。为了使联系人没有唯一性,我在我的用户模型中添加了一个唯一性检查 validates_uniqueness_of :contact_no, allow_nil: true, allow_blank: true 但是,它不断抛出错误 Mysql2::Error: Duplicate entry '' for key 'index_users_on_contact_no': 这是因为allow\u blank:t
validates_uniqueness_of :contact_no, allow_nil: true, allow_blank: true
但是,它不断抛出错误
Mysql2::Error: Duplicate entry '' for key 'index_users_on_contact_no':
这是因为
allow\u blank:true
参考这个
MySql unique index允许多个空值(如果列可为空),但在您的情况下,allow\u blank
设置为true,这将导致在表中插入多个空字符串“”
,这将导致该错误
您可以通过删除allow_blank:true
并手动将联系人编号设置为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\u nil:true
Yes!我对allow\u nil
好的有点困惑。我会试试看,然后再打给你。