我正在为遗留数据库构建 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 时,它可能会中断。
希望对您有所帮助。