2016-12-03 53 views
0

我想种子我的数据库项目与独特的项目名称,但我的播种机不工作,因为我的意图。播种与独特的对象

Seed.rb

users = User.order(:created_at).take(6) 
50.times do |n| 
name = "project-#{n+1}" 
category = "category-#{n+1}" 
users.each { |user| user.projects.create!(name: name, category: category) } 
end 

如果我删除validates :name, presence: true, uniqueness: true将创建50个项目为每个用户从1到50,但随后下一个用户会做同样的(计数重置),将创建项目从1到50的标题会干扰验证规则。

任何想法?

+0

相反,你在你的问题说,它没有为用户创建50个项目,然后移动到下一个用户。您正在评估项目和类别名称,然后为每个用户(每次迭代6次)创建项目。正如Alex所说的,你需要为他的名字提供额外的范围,正如他的回答所暗示的那样。 – David

回答

1

你可以得到最后project_id和它的初始计数器。超过user.id作为附加范围。

last_id = Project.last.try(:id) || 1 
50.times do |n| 
    name = "project-#{last_id+n}" 
    category = "category-#{last_id+n}" 
    users.each do |user| 
    user.projects.create!(name: ("#{name}-#{user.id}"), category: ("#{category}-#{user.id}")) 
    end 
end 

太多,你可以添加randTime.now.to_f.to_sSecureRandom.hex(5)

+0

感谢您的回答亚历克斯,但是,你忘了定义user_id作为代码不拾起它,所以我决定继续尝试'user_id = User.id',但它是不正确的,你能帮我吗? – Eltorero1992

+0

是的,我的错字。使用'user.id'而不是'user_id' –

+0

答案更新 –