【问题标题】:Extend ActiveRecord::Base with two column getters用两列 getter 扩展 ActiveRecord::Base
【发布时间】:2012-03-24 20:11:17
【问题描述】:

我正在使用旧数据库模式,它将 Rails 的 created_at 和 updated_at 的等价物定义为:

# MySQL
createDate MEDIUMTEXT
modifiedDate MEDIUMTEXT

数据库中几乎所有 20 个左右的表都存在这些列,我已经为它编写了 getter 代码,

  def createDate
    DateTime.strptime(read_attribute(:createDate), "%s")
  end

  def modifiedDate
    DateTime.strptime(read_attribute(:createDate), "%s")
  end

如何“扩展” ActiveRecord::Base 以便我的所有模型都获得这两种方法?

【问题讨论】:

    标签: ruby activerecord ruby-on-rails-3.2


    【解决方案1】:

    您可以创建一个模块并将其包含在 ActiveRecord::Base: 中:

    module LegacyTimestamps
      def createDate
        DateTime.strptime(read_attribute(:createDate), "%s")
      end
    
      def modifiedDate
        DateTime.strptime(read_attribute(:modifiedDate), "%s")
      end      
    end
    
    ActiveRecord::Base.send :include, LegacyTimestamps
    

    也可以仅在某些模型中包含此类模块:

    class User < ActiveRecord::Base
      include LegacyTimestamps
    end
    

    【讨论】:

    • 谢谢。你会建议我把它放在哪个文件中?初始化器是我的第一个猜测。
    • 其实这引发了一个错误:createDate is defined by ActiveRecord (ActiveRecord::DangerousAttributeError)..想法?
    • 你运行的是什么版本的rails?
    • 3.2.我现在把它变成了一个类 LegacyTimestamp
    猜你喜欢
    • 2015-11-14
    • 2011-01-20
    • 2011-05-28
    • 1970-01-01
    • 2019-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多