Рельсы: Заполните вложенные модели граблями и подделкой

Я хочу заполнить свою базу данных тестовыми данными, мои модели пользователей и профилей отделены друг от друга с отношением 1: 1. Скрипт, который я запускаю, создает данные, но не связывает их вместе. Как бы я получить это, чтобы связать данные вместе?

приложение / модели / user.rb

class User < ActiveRecord::Base
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable
  has_one :profile

  attr_accessible :email, :password, :password_confirmation, :remember_me,      :profile_attributes


 accepts_nested_attributes_for :profile

end

приложение / модели /profile.rb

class Profile < ActiveRecord::Base
   belongs_to :user

   attr_accessible :first_name, :last_name

   validates :first_name, presence: true
   validates :last_name, presence: true

конец

Lib / задачи /sample_data.rb

namespace :db do
  desc "Fill database with sample data"
  task populate: :environment do
   User.create!(email: "dufall@iinet.net.au",
             password: "123qwe",
             password_confirmation: "123qwe")
   Profile.create!(first_name: "Aaron",
                last_name: "Dufall")
   99.times do |n|
   first_name  = Forgery::Name.first_name
   Last_name  = Forgery::Name.last_name
   email = "example-#{n+1}@railstutorial.org"
   password  = "password"
   User.create!(email: email,
                password: password,
                password_confirmation: password)
  Profile.create!(first_name: first_name,
                  last_name: Last_name)
  end 
 end
end

1 ответ

Решение

Попробуйте использовать user.create_profile! вместо Profile.create!

namespace :db do
  desc "Fill database with sample data"
  task populate: :environment do
   user = User.create!(email: "dufall@iinet.net.au",
             password: "123qwe",
             password_confirmation: "123qwe")
   user.create_profile!(first_name: "Aaron",
                last_name: "Dufall")
   99.times do |n|
     first_name  = Forgery::Name.first_name
     Last_name  = Forgery::Name.last_name
     email = "example-#{n+1}@railstutorial.org"
     password  = "password"
     user = User.create!(email: email,
                password: password,
                password_confirmation: password)
     user.create_profile!(first_name: first_name,
                  last_name: Last_name)
  end 
 end
end
Другие вопросы по тегам