2011-01-13 17 views
3

私はfakerを使ってサンプルデータを生成しています。次のように私はこれを持っている:Rails 3:偽のデータを生成してDBを生成する

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 => "[email protected]", 
    :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 
+0

は –

+0

(メソッドとコールバックの両方)あなたがモデルでafter_saveコールバック部分をポストオススメあなたの代わりに使用の、にトリガーを試しました、saveメソッドを上書きしますか?私はレールを初めて使っているので、アンチパターンの練習かどうかは分かりません。:) –

+0

@JEsse、私はそれらを追加しました。 – donald

答えて

-3

save!はあなたが定義した任意のカスタムbefore_saveon_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 
+3

保存しないでください!検証に失敗すると例外が発生します。 –

関連する問題