我试图在我的Rails项目中使用唯一索引强制唯一性。我发现了令人困惑的事情。
就像在我的网站上注册用户一样,您需要提供电子邮件地址和昵称,两者都必须是唯一的。我为电子邮件和昵称添加了唯一索引。当重复出现时,我会救出异常ActiveRecord::RecordNotUnique
,现在问题是,我怎么知道哪个字段会导致异常?
非常感谢你的帮助。
答案 0 :(得分:2)
恕我直言,您还应该将uniqueness validators添加到您的模型中。这允许您使用Rails验证和错误消息。
# add to model
validates :email, uniqueness: true
validates :nickname, uniqueness: true
为确保数据库级别的唯一性,唯一索引仍然是一个好主意。
答案 1 :(得分:0)
在ActiveRecord中,您可以使用valid?
方法对对象运行验证。如果它返回false
,那么您可以查看错误消息以确定哪个字段引发了错误。
示例:
user = User.new({email: 'unique_email@google.com', nickname: 'non_unique_nickname'})
user.valid? #This will run validations
=> false
user.errors.messages
=> {:nickname=>["has already been taken"]}