我正在尝试使用一些虚假数据来播种数据库。我希望每个Prospect都属于一个用户。我的种子创建了用户,但未能创建潜在客户,我不知道为什么。
User.destroy_all
Prospect.destroy_all
50.times do
u = User.new
u.email = Faker::Internet.email
u.password = "password"
u.first_name = Faker::Name.first_name
u.last_name = Faker::Name.last_name
u.save
end
users = User.all
puts users
users.each do |user|
p = Prospect.new
p.id = user.id
p.parent_first_name = user.first_name
p.parent_last_name = user.last_name
p.student_first_name = Faker::Name.first_name
p.save
end
这是我的用户和潜在客户模型
# prospect.rb
class Prospect < ApplicationRecord
belongs_to :user
def full_parent_name
name = "#{parent_first_name.capitalize} #{parent_last_name.capitalize}"
end
end
# user.rb
class User < ApplicationRecord
has_one :prospect
... lots of devise and Oauth stuff
end
我的puts语句显示User.all正在查找50个用户,因此我认为我的问题是尝试创建belongs_to
而has_one
是问题所在。我应该以不同的方式处理吗?
答案 0 :(得分:2)
这看起来不对:
p.id = user.id
您不希望您的产品与您的用户具有相同的ID。你可以写
p.user = user
虽然。
而不是
p = Prospect.new
p.user = user
p.parent_first_name = user.first_name
p.parent_last_name = user.last_name
p.student_first_name = Faker::Name.first_name
p.save
你可以写下:
user.create_prospect(student_first_name: Faker::Name.first_name)
由于您的潜在客户属于用户,因此不应在其用户的数据库中保留相同的信息。您可以使用delegate
或将parent_first_name
定义为user.first_name
,而无需将其写入数据库。