如何正确处理Rails中的ActiveRecord :: RecordNotUnique

时间:2015-05-10 11:19:57

标签: ruby-on-rails ruby exception

我试图在我的Rails项目中使用唯一索引强制唯一性。我发现了令人困惑的事情。

就像在我的网站上注册用户一样,您需要提供电子邮件地址和昵称,两者都必须是唯一的。我为电子邮件和昵称添加了唯一索引。当重复出现时,我会救出异常ActiveRecord::RecordNotUnique,现在问题是,我怎么知道哪个字段会导致异常?

非常感谢你的帮助。

2 个答案:

答案 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"]}