【发布时间】:2011-10-01 21:24:35
【问题描述】:
我有一个旧表,其中包含最后更新时间戳的列。 现在我想告诉我的模型,rails 属性 updated_at 已映射到旧列。
alias_attribute :updated_at, :lastcall
现在我可以访问该列,但是当我更新对象时它没有得到更新。 那么如何将 Rails 时间戳与旧列一起使用? 最好的, P
【问题讨论】:
标签: ruby-on-rails activerecord
我有一个旧表,其中包含最后更新时间戳的列。 现在我想告诉我的模型,rails 属性 updated_at 已映射到旧列。
alias_attribute :updated_at, :lastcall
现在我可以访问该列,但是当我更新对象时它没有得到更新。 那么如何将 Rails 时间戳与旧列一起使用? 最好的, P
【问题讨论】:
标签: ruby-on-rails activerecord
我不知道是否有“正确”的做法,但您可以在模型上使用 before_save 或 before_update 过滤器。
class LegacyModel < ActiveRecord::Base
before_update :update_lastcall
private
def update_lastcall
self.lastcall = Time.now
end
end
如果您不想让模型变得凌乱,可以将其放入 Observer。
【讨论】:
也尝试添加它,这将为 setter 方法设置别名。
alias_attribute :updated_at=, :lastcall=
【讨论】:
我也想draw your attention to this,如果您的时间戳列名称是站点范围的(就像我的一样)。我不想弄乱我的模型,幸运的是,你可以猴子补丁ActiveRecord::Timestamp。我将以下内容放入名为lib/rails_ext/active_record.rb 的目录中(我是一个组织怪胎),并在config/initializers/ 的一个初始化程序中使用require 'rails_ext/active_record' 声明调用它。
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)。无需修改您的模型。
【讨论】: