2

Railsプロジェクトのデータベースをシードしていますが、レコードの1つが作成されていません。Railsコンソールでまったく同じ構文を使用して作成できますが、シードファイルでは機能しません。シードファイルのコードは次のとおりです。

admin = Admin.find_by_email('example@example.com')
if !admin
admin = Admin.create(:email => 'example@example.com', :password => 'password',              :password_confirmation => 'password', :first_name =>
 'example', :last_name => 'admin')
end

if !Project.find_by_name('Templates')
  Project.create(:name => 'Templates', :admin => admin)
  if Project.find_by_name("Templates")
     puts "Project Found"
  else
    puts "Project not Found"
  end  
end

'rake db:seed'を実行すると、常に「プロジェクトが見つかりません」と表示されます。Railsコンソールで同じcreateステートメントを実行すると、作成されたProjectオブジェクトが返されます。

4

2 に答える 2

5

無効なレコードを作成しようとしていることが原因である可能性があります。この種の問題を防ぐために、シードファイルでbangedメソッド(save!/ )を使用することに慣れています。create!

于 2012-12-05T15:38:10.760 に答える
2

まず、プロジェクトを作成するときに管理者IDを参照する必要がありますか?プロジェクトテーブルの列は実際には「admin_id」ですか?

Project.create(:name => 'Templates', :admin_id => admin.id)

私が試した2番目のことは、管理者を作成するビットの後にプットを置いて、そのビットが機能することを確認することです。プロジェクトビットが失敗する前に、そのビットが機能したかどうかは言うまでもありません。

編集1:

シードファイルの下半分で次のようなことを試してみてください。手順が機能しなかった場合は、エラーが出力されます。

project = Project.find_or_initialize_by_name_and_admin('Templates', admin)
puts project.errors if project.nil? 
于 2012-12-05T15:12:29.720 に答える