【问题标题】:Why won't my Ruby app save instances to the database?为什么我的 Ruby 应用程序不能将实例保存到数据库中?
【发布时间】:2021-02-12 07:40:56
【问题描述】:

我有一个正在使用 ActiveRecord 的 Sinatra 应用程序。每当我运行 User.create 时,都会创建一个实例,但没有保存任何 ID。我试过rake db:reset 但没有任何改变。请帮我解决这个问题!

Pry 中的一个例子:

 pry(#<AlbumController>)> User.create
=> #<User:0x00007fffea2bed18 id: nil, name: nil, username: nil, email: nil, password_digest: nil>

为了澄清,这与许多其他表一起被迁移并且仍然存在问题,但是如果我可以修复 User#create 那么我可能能够修复所有其他表。此外,在我今天早上检查之前,一切都很顺利。我不知道是否某些 Ruby 或 Visual Studio 更新搞砸了,所以如果有人对此有所了解,请告诉我。

另外,更多细节你可以直接通过我的Github Repository查看代码

【问题讨论】:

    标签: ruby activerecord sinatra sinatra-activerecord


    【解决方案1】:

    create 失败的唯一原因是验证失败,或者是因为诸如before_save 弹出和异常等中断了保存。

    找出问题所在最简单的方法是:

    User.create!
    

    这要么成功并创建一个用户,要么引发异常。

    如果您尝试过保存,现在想了解更多关于失败的原因:

    user = User.create
    user.persisted? # Returns true if created, false otherwise
    user.errors.full_messages
    

    那里更容易阅读。

    最常见的失败原因是验证失败,因为您跳过了必填字段。

    【讨论】:

      猜你喜欢
      • 2021-07-29
      • 2022-01-18
      • 2012-07-05
      • 1970-01-01
      • 2016-05-07
      • 1970-01-01
      • 2011-09-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多