Ruby RAILS:重复的键值违反了设计的唯一约束

Ruby RAILS:重复的键值违反了设计的唯一约束,ruby,devise,ruby-on-rails-4,Ruby,Devise,Ruby On Rails 4,我正在使用Desive gem进行RoR项目,我遇到了一个问题。我有一个表继承用户,应该有电子邮件和密码,但我也有一个从用户模型继承的客户模型,这个模型永远不会有密码,可能有也可能没有电子邮件。该电子邮件只是客户个人资料信息的一个字段 def User < ActiveRecord::Base devise ..., :validatable end def Customer < User def email_required? false end def p

我正在使用Desive gem进行RoR项目,我遇到了一个问题。我有一个表继承用户,应该有电子邮件和密码,但我也有一个从用户模型继承的客户模型,这个模型永远不会有密码,可能有也可能没有电子邮件。该电子邮件只是客户个人资料信息的一个字段

def User < ActiveRecord::Base
 devise ..., :validatable
end

def Customer < User
 def email_required?
    false
  end

  def password_required?
    false
  end
end 
def User
我的问题是,当我使用空电子邮件字段创建第一个客户时,它会使用空电子邮件创建一个客户,但对于第二个客户,我遇到了一个错误:

PG::错误:错误:重复的键值违反了唯一约束 “在电子邮件上索引用户”详细信息:键(电子邮件)=()已存在

它尝试创建另一个客户,但使用相同的空电子邮件。默认情况下,Desive会在电子邮件上设置唯一性验证和默认值“”


感谢

对于这个特定的用例,您唯一的选择就是为客户模型使用不同的表,因为email属性上的索引也适用于客户,这就是rails给您错误的原因

另一种(但不推荐)解决方案是从users表中删除索引,但这会对性能产生负面影响