2

我正在为 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 对象。

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)

我要尝试的第二件事是在您创建管理员的位之后放置一个放置,以确保该位有效。您无话可说,在项目位失败之前该位是否有效。

编辑1:

尝试在种子文件的下半部分执行类似的操作,如果该步骤不起作用,它应该输出错误:

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