Rails 3: генерация поддельных данных для заполнения базы данных - PullRequest
3 голосов
/ 13 января 2011

Я использую фейкер для создания образцов данных.У меня это выглядит следующим образом:

require 'faker'

namespace :db do 
  desc "Fill database with sample data" 
  task :populate => :environment do
    Rake::Task['db:reset'].invoke 
    User.create!(:name => "rails",
    :email => "example@railstutorial.org", 
    :password => "foobar", 
    :password_confirmation => "foobar")

    99.times do |n| 
      #name = Faker::Name.name
      name = "rails#{n+1}"
      email = "example-#{n+1}@railstutorial.org" 
      password = "password" 
      user = User.create!(:name => name,
      :email => email, 
      :password => password, 
      :password_confirmation => password)

    end 
  end
end

Проблема в том, что у меня есть пара обратных вызовов after_save, которые не вызываются при создании пользователя.Это почему?Спасибо

Методы:

  after_save :create_profile
def create_profile
    self.build_profile()
  end

1 Ответ

0 голосов
/ 14 января 2011

Во всех моих чтениях кажется, что save! обходит любые пользовательские фильтры before_save, on_save или after_save, которые вы определили. Исходный код для create! показывает, что он вызывает save!. Если вам абсолютно НЕ нужна версия взрыва, почему вы ее используете? Попробуйте удалить все ваши методы взрыва и просто вызывать версии без взрыва:

[1..100].each do |n| 
  name = "rails#{n+1}"
  email = "example-#{n+1}@railstutorial.org" 
  password = "password" 
  user = User.new(:name => name, :email => email, :password => password, :password_confirmation => password)

  if !user.save
    puts "There was an error while making #{user.inspect}"
  end
end 
...