Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.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 在Rails 4中使用validate_唯一性_Ruby On Rails_Ruby On Rails 4_Devise - Fatal编程技术网

Ruby on rails 在Rails 4中使用validate_唯一性

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

我已在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: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
好的有点困惑。我会试试看,然后再打给你。