我正在尝试在创建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)
返回该电子邮件的用户。
答案 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)