Rails时间戳映射到旧表

时间:2011-07-09 14:12:23

标签: ruby-on-rails activerecord

我有一个遗留表,其中包含上次更新时间戳的列。 现在我想告诉我的模型rails属性updated_at被映射到旧列。

alias_attribute :updated_at, :lastcall

现在我可以访问该列但是在更新对象时它没有得到更新。 那么如何将rails时间戳与旧列一起使用? 最好, P

3 个答案:

答案 0 :(得分:2)

尝试添加它,这将为setter方法添加别名。

alias_attribute :updated_at=, :lastcall=

答案 1 :(得分:1)

我不知道是否有“正确”的方法,但你可以在模型上使用before_save或before_update过滤器。

class LegacyModel < ActiveRecord::Base
  before_update :update_lastcall

  private

  def update_lastcall
    self.lastcall = Time.now
  end

end

如果您不想让模型变得混乱,可以将它放入Observer。

答案 2 :(得分:1)

我还想draw your attention to this,如果您的时间戳列名称是站点范围的(就像我的那样)。我不想让我的模型混乱,幸运的是,你可以修补ActiveRecord::Timestamp。我将下面放入一个名为lib/rails_ext/active_record.rb的目录(我是一个组织狂热者),并在我require 'rails_ext/active_record'的一个初始化程序中使用config/initializers/声明调用它。

module ActiveRecord
  module Timestamp
    private
    def timestamp_attributes_for_update #:nodoc:
      [:modified_time, :updated_at, :updated_on, :modified_at]
    end
    def timestamp_attributes_for_create #:nodoc:
      [:created_date, :created_at, :created_on]
    end
  end
end

我的自定义属性最终为:modified_time:created_date。您可以在其中一列(:lastcall,我假设)中指定您的timestamp_attributes_for_update列。不需要你的模型。