Ruby RAILS:重复的键值违反了设计的唯一约束
我正在使用Desive gem进行RoR项目,我遇到了一个问题。我有一个表继承用户,应该有电子邮件和密码,但我也有一个从用户模型继承的客户模型,这个模型永远不会有密码,可能有也可能没有电子邮件。该电子邮件只是客户个人资料信息的一个字段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
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表中删除索引,但这会对性能产生负面影响