【问题标题】:Active Record object loaded from database is invalid从数据库加载的 Active Record 对象无效
【发布时间】:2013-01-22 14:39:24
【问题描述】:

我有一个从数据库加载的 ActiveRecord 对象。

当我在此对象上调用 valid? 时,由于未满足 rails 唯一约束,它返回 false,至少验证是这样说的。

我检查了数据库架构,唯一字段也定义了一个索引,因此在数据库级别上也确保了唯一性。

这里发生了什么?这怎么可能?

【问题讨论】:

    标签: ruby-on-rails rails-activerecord


    【解决方案1】:

    您应该检查 @object.errors.inspect 以检查正在发生的事情,然后进行相应的修复。

    同样重要的是,您何时检查对象的有效性,即在保存之前或之后。

    更优雅的方式是使用@object.save!

    Ruby 应该会告诉您在尝试保存对象时出了什么问题。

    【讨论】:

    • 错误是,数据库上的索引不是唯一的,但我认为它增加了我的困惑。
    【解决方案2】:

    如果您没有在数据库表上定义唯一索引,就会发生这种情况!

    更详细一点:我认为数据库在列上有一个唯一索引,但结果证明这是一个“常规”索引。 问题出现了,因为在应用程序的某个时刻,模型在没有先验证的情况下被保存了。这导致数据库中的非唯一条目。通过调用valid? 触发rails 内部例程检查唯一性(无论如何实现),它正确返回false。

    经验教训:始终确保在数据库级别添加唯一索引。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多