2016-12-03 5 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 раз) для каждой итерации. Как сказал Алекс, вам необходимо предоставить дополнительные возможности для названия, как предлагает его ответ. – 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 

Слишком вы можете добавить rand, Time.now.to_f.to_s, SecureRandom.hex(5)

+0

Спасибо за ваш ответ Алекс, однако вы забыли определить user_id, поскольку код не подбирает его, поэтому я решил продолжить и попробовать «user_id = User.id», но это не правильно, можете ли вы, пожалуйста, помочь мне в этом? – Eltorero1992

+0

Да, моя опечатка. Используйте 'user.id' вместо' user_id' –

+0

Ответ обновляется –

Смежные вопросы