📌  相关文章
📜  未知列 '.updated_at' (1)

📅  最后修改于: 2023-12-03 14:55:26.386000             🧑  作者: Mango

介绍:未知列 '.updated_at'

在使用 ActiveRecord 进行数据表操作时,经常会遇到未知列 '.updated_at' 的错误提示。这个错误提示通常是由于数据表中没有更新时间列或者更新时间列名不是 'updated_at' 导致的。

原因

ActiveRecord 是一种面向对象的数据库接口层,用于在 Rails 应用程序中处理与数据库的交互。在默认情况下,ActiveRecord 会自动维护两个列,即 created_at 和 updated_at,用于记录数据的创建时间和最后更新时间。如果数据表中没有这两个列,或者列名不是 'created_at' 和 'updated_at',则会产生未知列 '.updated_at' 的错误提示。

解决方案
1. 添加更新时间列

添加一个更新时间列是比较简单的解决方案。只需要在数据表中添加一个名为 'updated_at' 的列,Rails 就能够自动维护这个列的值。

2. 修改更新时间列名

如果数据表中已经存在一个更新时间列,但是列名不是 'updated_at',则需要修改模型文件来让 ActiveRecord 知道该列的名称。在模型文件中使用 self.table_name= 来指定数据表名称,再使用 self.primary_key= 指定主键列名称,最后使用 attribute 方法来指定更新时间列名称,例如:

class MyModel < ActiveRecord::Base
  self.table_name = 'my_table'
  self.primary_key = 'id'
  attribute :last_modified_at, :datetime, default: -> { Time.zone.now }
end
3. 去除更新时间列

如果不需要维护数据的更新时间,可以在模型文件中使用 self.record_timestamps = false 来关闭 ActiveRecord 对于更新时间列的维护,例如:

class MyModel < ApplicationRecord
  self.record_timestamps = false
end
总结

未知列 '.updated_at' 这个错误提示,通常是由于数据表中没有更新时间列或者更新时间列名不是 'updated_at' 导致的。通过添加更新时间列、修改更新时间列名或者去除更新时间列来解决这个问题。需要根据具体情况来选择最适合的解决方案。