Я решил эту проблему следующим образом:
комментируя:
before_safe :build_profile
в моей модели User
, и мое редактирование моей задачи по рейку выглядело так:
# before running this task comment out: before_create :build_profile in user.rb in order to make this work correctly
namespace :db do
desc "Create user records in the development database."
task :populate => :environment do
require 'faker'
def randomDate
"#{(1900..2012).to_a.sample}-#{(1..12).to_a.sample}-#{(1..28).to_a.sample}"
end
def decimal_selection_array(start,limit,step_size=1)
decimal_array = (start..limit).step(step_size).map{|i| i.to_s}.to_a
decimal_array.insert(0,"Below #{start.to_f}")
decimal_array.insert(-1,"Above #{limit.to_f}")
end
1000.times do |n|
username = "#{Faker::Name.first_name}#{n+1}"
User.create!(
:username => username.gsub(/[^0-9a-z]/i, ''),
:email => Faker::Internet.email,
:password => "foobar"
)
Profile.create!(
:user_id => "#{n+1}",
:motd => Faker::Lorem.sentence,
#Profile details
:first_name => Faker::Name.first_name.gsub(/[^a-z]/i, ''),
:last_name => Faker::Name.last_name.gsub(/[^a-z]/i, ''),
:birthday => randomDate,
:gender => (1..2).to_a.sample,
:marital_status => (1..7).to_a.sample,
:sexual_preference => (1..3).to_a.sample,
:ethnicity => (1..10).to_a.sample,
:country => Faker::Address.country,
:location => Faker::Address.country,
#About the user
:about_me => Faker::Lorem.paragraph,
#Personal stats
:height => decimal_selection_array(5.0,7.0,0.1).to_a.sample,
:body_type => (1..7).to_a.sample,
:hair => (1..7).to_a.sample,
:eye_colour => (1..6).to_a.sample,
:drugs => (1..4).to_a.sample,
:alcohol => (1..4).to_a.sample,
:cigarettes => (1..3).to_a.sample,
:likes => Faker::Lorem.sentence,
:dislikes => Faker::Lorem.sentence,
:bad_habits => Faker::Lorem.sentence,
#Favourite things
:food => Faker::Lorem.sentence,
:sport => Faker::Lorem.sentence,
:music => Faker::Lorem.sentence,
:television => Faker::Lorem.sentence,
:book => Faker::Lorem.sentence,
:animal => Faker::Lorem.sentence,
:place => Faker::Lorem.sentence,
:possession => Faker::Lorem.sentence
)
end
end
end
Мне пришлось внести несколько корректировок в то, что Факер передавал в мою базу данных, поскольку вещи не проходили валидацию.Такие вещи, как имена пользователей с символами, отличными от букв и цифр, и это также произошло с last_name.Поэтому мне пришлось отфильтровать все эти вещи, а затем я выполнил задачу take и успешно обновил свою базу данных на 1000 пользователей с информацией профиля.
Все, что мне нужно сделать, это раскомментировать before_create всякий раз, когда я хочу добавить образецданные для остановки строк профиля, создаваемых для пользователей при создании.
Я также добавил user_id к attr_accessible в моей модели профиля, чтобы столбец user_id мог заполняться числами от 1 до 1000, которые будут соответствовать им с пользователем.