2016-12-03 1 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を削除する場合は、1から50までの各ユーザのための50件のプロジェクトを作成しますが、その後、次のユーザーのために同じことをするだろう(リセットカウント)でプロジェクトを作成します。バリデーションルールに干渉する1〜50のタイトル。

アイデア?

+0

反しを追加することができます。プロジェクトとカテゴリ名を評価してから、繰り返しごとにユーザーごとにプロジェクトを作成します(6回)。アレックスが言ったように、彼の答えが示唆するようにあなたは名前のための追加の範囲を提供する必要があると述べた。 – 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 

あまりにもあなたはそれが次のユーザーに移動するユーザのための50件のプロジェクトを作成していない、あなたの質問に記載されたものにrandTime.now.to_f.to_sSecureRandom.hex(5)

+0

あなたの答えをありがとうアレックス、しかし、コードはそれを拾っていないようにuser_idを定義するのを忘れたので、私は "user_id = User.id"を試してみることにしましたが、正しくありません。 – Eltorero1992

+0

はい、私のタイプミスです。 'user_id'の代わりに' user.id'を使用してください –

+0

答えは更新されます –

関連する問題