【问题标题】:Rails seed file not creating recordRails 种子文件未创建记录
【发布时间】:2012-12-05 14:31:04
【问题描述】:

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

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    我认为这可能是因为您正在尝试创建无效的记录。我习惯在种子文件中使用 banged 方法(save!/create!)来防止此类问题。

    【讨论】:

    • 非常感谢,成功了。使用 non-banged create 方法和 create!它实际上告诉我出了什么问题。
    【解决方案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? 
    

    【讨论】:

    • 我为管理员添加了检查并从中获得了成功。我还将 :admin => admin 更改为 :admin_id => admin.id 但仍然一无所获。我最初是这样做的,但也许我应该传入整个管理对象来创建关联。
    • 感谢您的帮助,我对 Rails 很陌生,不知道错误属性。我敢肯定,它肯定会在未来派上用场。
    • 没问题。这 !方法很好,但它们确实绕过了模型中的任何验证,因此请谨慎使用。某些事情失败可能有充分的理由......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多