我正在为一个RoR项目使用Devise gem,我遇到了一个问题。我有一个表继承User应该有一个电子邮件和密码,但我也有一个继承自User模型的客户模型,这个模型永远不会有密码,可能有或没有电子邮件。该电子邮件只是客户个人资料信息的字段。
def User < ActiveRecord::Base
devise ..., :validatable
end
def Customer < User
def email_required?
false
end
def password_required?
false
end
end
我的问题是,当我用空的电子邮件字段创建我的第一个客户时,它创建了一个空的电子邮件客户,但对于第二个客户我收到了错误:
PG ::错误:错误:重复键值违反唯一约束 “index_users_on_email”详细信息:密钥(电子邮件)=()已存在。
它尝试使用相同的空电子邮件创建其他客户。默认情况下,Devise在电子邮件上设置唯一性验证,默认值为“”。
由于
答案 0 :(得分:1)
对于该特定用例,您唯一的选择是为Customer模型使用不同的表,因为email属性上的索引也适用于客户,这就是rails为您提供错误的原因。
其他(但不推荐)解决方案是从users表中删除索引,但这会对性能产生负面影响。