【问题标题】:Rails 5.2.2.1 ActiveRecord::RecordInvalid: Validation failedRails 5.2.2.1 ActiveRecord::RecordInvalid:验证失败
【发布时间】:2019-03-21 22:15:51
【问题描述】:

我将公司的应用程序从 Rails 5.2.1 更新到 Rails 5.2.2.1。在更新后运行我们的测试套件时,我遇到了在模型范围内验证唯一性的问题,特别是在将模型附加到另一个模型的 ActiveRecord 关系时。例如,在我们的应用程序中,如果我要执行 @person.cars << @car,我们将运行唯一性验证 (validates :car_id, uniqueness: { scope: :group_id }。即使在 @person.cars 最初为空的情况下,我们的更新后分支也会在此引发验证错误唯一性检查。这些测试用例在我们的主分支上工作(更新前),但不在我们的更新分支上(更新后)。除了将 Rails 从 5.2.1 更新到 5.2.2.1 之外,没有对应用程序进行其他更改.我想知道是否有人知道可能导致此问题的与 Rails 5.2.2.1 唯一性验证相关的任何现有错误或问题。我查看了 Rails 和 ActiveRecord 的更改日志,以及一些其他已更新的依赖项,但我一直找不到任何东西。

【问题讨论】:

  • ActiveRecord 是否对您的数据库表进行了任何更改?比如向 person.cars 添加验证要求?在更新期间查看任何 db:migrate 日志/命令?
  • 根本没有对数据库进行任何更改,也没有运行任何命令。
  • 发布错误会有所帮助。
  • 输出的错误信息是我们自己生成的,但它是一个 ActiveRecord::RecordInvalid 错误。 ActiveRecord::RecordInvalid: Validation failed: Form can't be used because one already exists for this vendor.
  • Gemfile.lock 中的哪些其他依赖项发生了变化?

标签: ruby-on-rails ruby updates


【解决方案1】:

看起来这是在 Rail 的 ActiveRecord::Associations 中所做的更改的问题,该更改用于在附加到 ActiveRecord 关联时删除版本 5.2.1 中的重复项。这从未引发 RecordInvalid 异常,因为重复项将被事先删除。在 5.2.2.1 中,它看起来已被删除,并且任何附加到关联的重复项将不再被抢先删除(最有可能模仿 Ruby += 功能)。我不得不将您对 += 的所有使用更改为与 |= 的关系,以确保不再附加重复项。

抱歉,无法发布任何代码或堆栈跟踪。堆栈跟踪是非常特定于应用程序的,根本没有帮助,而且代码是专有的。感谢您的帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多