ruby-on-rails - 在 ActiveRecord/Rails 中更改 updated_at 列的名称

标签 ruby-on-rails postgresql activerecord jruby jrubyonrails

<分区>

我正在为遗留数据库构建 JRuby on Rails 应用程序。这些表都没有“created_at”列(所以我可以继续添加它),但它们都有一个“modtime”列而不是“updated_at”列。我无法将数据库中的所有列名从“modtime”更改为“updated_at”,因为大部分 java 代码和 sql 函数都使用此列名。可以简单地向所有表添加一个“updated_at”列,但这会造成混淆并且不太理想。

如何让 ActiveRecord 使用“modtime”而不是“updated_at”作为列名?

最佳答案

要让 ActiveRecord 使用 modtime 作为其更新列,您需要执行以下操作:

在 config/initializers 目录中创建一个名为 active_record_patch.rb 的文件

# config/initializers/active_record_patch.rb
module ActiveRecord
  module Timestamp      

    private

      def timestamp_attributes_for_update #:nodoc:
        [:modtime, :updated_on, :modified_at]
      end
  end
end

您在这里所做的是覆盖 ActiveRecord::Timestamp 的 timestamp_attributes_for_update 方法,该方法用于识别其更新属性的名称。该文件需要放在 config/initializers 中,因为初始化程序中的所有文件都会在 Rails 应用程序加载后运行。

这是一个猴子补丁,覆盖了 ActiveRecord::Timestamp 的正常行为,当您使用不同版本的 ActiveRecord 时,它可能会中断。

希望对您有所帮助。

关于ruby-on-rails - 在 ActiveRecord/Rails 中更改 updated_at 列的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20615105/

相关文章:

ruby-on-rails - 如何将哈希值插入数据库?

mysql - 使用 Date.commercial 将 Mysql week 转换为 Date

mysql - 从 Rails 3 调用 MySQL 存储过程(返回结果集)时出错

ruby - Rails 虚拟对象添加到 Active Record 数组

mysql - 针对旧数据库进行 Rails 测试

ruby-on-rails - 按升序排序 Rails

sql - 在 linux 中插入数据时在 postgres 列中保留新行

node.js - NodeJS Sequelize 制作主表降序示例

sql - 如何使用 PostgreSQL 将序列链接到字段?

mysql - 如何在第三个表上匹配两种记录