我正在为遗留数据库构建一个JRuby on Rails应用程序。没有一个表有'created_at'列(所以我可以继续添加),但它们都有一个'modtime'列而不是'updated_at'列。我无法将db中的所有列名从'modtime'更改为'updated_at',因为大部分java代码和sql函数都使用此列名。可以简单地将“updated_at”列添加到所有表中,但这会令人困惑并且不太理想。
如何让ActiveRecord使用'modtime'作为列名而不是'updated_at'?
答案 0 :(得分:1)
以下是您需要为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时,它可能会中断。
希望它有所帮助。