我有一个遗留表,其中包含上次更新时间戳的列。 现在我想告诉我的模型rails属性updated_at被映射到旧列。
alias_attribute :updated_at, :lastcall
现在我可以访问该列但是在更新对象时它没有得到更新。 那么如何将rails时间戳与旧列一起使用? 最好, P
答案 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
列。不需要你的模型。