Rails在幂等种子文件中查找或创建 - 不通过验证

时间:2015-11-12 18:46:43

标签: ruby-on-rails ruby activerecord

我正在尝试在创建find_or_create_by时使用Users创建一个幂等种子文件,以及它们与每个Account的关联。

我创建了一个Accounts列表,并希望将User与每个帐户相关联。

用户模型在uniqueness上进行email验证。

在我第一次运行种子文件时,会创建帐户和用户并将其关联起来。

然而,在我第二次运行种子文件时,我得到Validation failed: Email has already been taken

如果我跑了,我会收到验证错误。

Account.first.users.find_or_create_by!(email: email)

我的印象是find or create by返回第一条记录或创建新记录。但它似乎只是创建一个新记录,而不是找到以前的用户记录,即使它存在。

如果我打电话

User.find_or_create_by!(email: email)

返回该电子邮件的用户。

1 个答案:

答案 0 :(得分:1)

您尝试创建的用户可能在该帐户中不存在。

Account.first.users.find_or_create_by!(email: email)

如果第一个帐户中没有电子邮件用户,则会尝试创建一个。但是,您无法创建该用户,因为已收到该电子邮件。

User.find_or_create_by!(email: email)

这是有效的,因为它会检查任何用户,而不仅仅是第一个帐户中的用户。

如果您希望它始终正确运行,您可以执行类似

的操作
Account.first.users << User.find_or_create_by!(email: email)

如果你知道那些用户数组是空的。或者可能,

User.find_or_create_by!(email: email).update_attributes(:account_id => Account.first.id)