在ActiveRecord / Rails中更改updated_at列的名称

时间:2013-12-16 15:55:53

标签: ruby-on-rails postgresql activerecord jruby jrubyonrails

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

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

1 个答案:

答案 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时,它可能会中断。

希望它有所帮助。