Rails:使用rake和forgery填充嵌套模型

时间:2012-06-17 12:46:19

标签: ruby-on-rails nested rake populate ruby-forgery

我想用测试数据填充我的数据库,我的用户和个人资料模型彼此分开,形式为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 个答案:

答案 0 :(得分:0)

尝试使用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