Rails 播种循环 has_one 失败
Rails seeding loop with a has_one failing
我正在尝试用一些虚假数据为我的数据库做种。我希望每个潜在客户 belong_to 一个用户。我的种子创建了用户,但无法创建潜在客户,我不知道为什么。
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
是问题所在。我应该以不同的方式处理吗?
这看起来不对:
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
,而无需将其写入数据库。
我正在尝试用一些虚假数据为我的数据库做种。我希望每个潜在客户 belong_to 一个用户。我的种子创建了用户,但无法创建潜在客户,我不知道为什么。
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
是问题所在。我应该以不同的方式处理吗?
这看起来不对:
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
,而无需将其写入数据库。