带有has_one失败的Rails播种循环

时间:2017-01-28 22:52:32

标签: ruby-on-rails ruby seed

我正在尝试使用一些虚假数据来播种数据库。我希望每个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_tohas_one是问题所在。我应该以不同的方式处理吗?

1 个答案:

答案 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,而无需将其写入数据库。