我在Ruby 2.1.0中使用Rails 3.2.14。我有一个方法,通过检查电子邮件ID是否存在来负责在DB中创建用户。
我使用设计和 SAML 进行用户身份验证和会话创建。
我使用以下代码执行此操作:
@user = User.find_or_create_by_email(:email=>"xyz@gmail.com", firstname: 'XY', lastname: 'Z', code: 'ABC')
这适用于大多数情况,但其余时间我一直在我的帐户中收到错误通知电子邮件,因为上面的代码尝试使用相同的电子邮件再创建一个用户:
An ActiveRecord::RecordNotUnique occurred in sessions#consume:
Mysql2::Error: Duplicate entry 'xyz@gmail.com' for key 'email'
如何避免此错误?
答案 0 :(得分:1)
您需要使用Upsert
之类的内容 SELECT
将首先运行INSERT
,然后INSERT
。另一个实例可能在其间运行User.transaction do
@user = User.find_or_create_by_email(:email=>"xyz@gmail.com", firstname: 'XY', lastname: 'Z', code: 'ABC')
end
。您也可以使用交易:
PIXI.utils._saidHello = true;