我正在为rails项目播种数据库,但我的一条记录没有被创建。我可以在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对象。
答案 0 :(得分:5)
我认为可能是因为您正在尝试创建无效的记录。我习惯在种子文件中使用banged方法(save!
/ create!
)来防止这种问题。
答案 1 :(得分:2)
首先猜测,您在创建项目时是否应该引用管理员ID?项目表中的列实际上是'admin_id'吗?
Project.create(:name => 'Templates', :admin_id => admin.id)
我要尝试的第二件事是在创建管理员之后放置一个放置以确保该位有效。在项目位失败之前,你没有什么可说的。
编辑1:
尝试在种子文件的下半部分做这样的事情,如果步骤不起作用,它应输出错误:
project = Project.find_or_initialize_by_name_and_admin('Templates', admin)
puts project.errors if project.nil?