Ruby + ActiveRecord:如何配置导致'yyyy-mm-dd'日期格式的日期字段?

时间:2016-11-05 18:17:12

标签: ruby activerecord

我正在使用ActiveRecord 4.2.4来处理数据库。

一些背景知识:

  • Ruby'1.9.3'
  • ActiveRecord'4.2.4'
  • 黄瓜'2.1.0'
  • 我没有使用Rails。

我最近遇到过这个问题,生成的输出文件显示:

   ROLE             | UPDATED_DATE
   Teacher          | 2016-10-26 09:54:06 UTC

但是在UPDATED_DATE,我不希望'2016-10-26 09:54:06 UTC ',我希望只有'2016-10-26'显示在文件中,如下所示:

   ROLE             | UPDATED_DATE
   Teacher          | 2016-10-26

UPDATED_DATE列在表格中具有DATE类型。我执行查询而不将其转换为任何内容。我没有使用Ruby对象/模型来映射数据库表,而只是简单地运行SQL并将结果打印到文件中。以下是我在代码中的内容:

 def initialize
   ActiveRecord::Base.time_zone_aware_attributes = false

   db_config = DBConfig.get_config_file(DB_CONFIG)
   ActiveRecord::Base.establish_connection(
    :adapter =>  db_config['adapter'],
    :username => db_config['username'],
    :password => db_config['password'],
    :database => db_config['database']
  )

  @connection = ActiveRecord::Base.connection
end

def extract_file
  delimiter = '|'
  output_file = 'extract.txt'
  query = "Select role, UPDATED_DATE from ROLE where USER_ID = 'user1'"
  # loop through the result
  File.open(output_file, 'w'){|f|
    result = @connection.exec_query(query)
    result.rows.each do |row|
      array << (row.join(delimiter))
      if array.length >= 100
        f.puts array.join("\n")
        array = []
      end
    end
end

我尝试添加以下行:

   ActiveRecord::Timestamp.record_timestamps = false

但是,我收到以下错误:

  undefined method `record_timestamps=' for ActiveRecord::Timestamp:Module

根据网站:

     http://www.rubydoc.info/gems/activerecord/4.2.4/ActiveRecord/Timestamp

     Timestamping can be turned off by setting:

     config.active_record.record_timestamps = false

在哪里配置?在config / database.yml文件中?请分享您的解决方案。

1 个答案:

答案 0 :(得分:0)

如果您只对上次更新的日期而不是时间感兴趣,那么有两种选择:

  1. 请勿在数据库中使用updated_at timestamp列。而是使用updated_on date列,Rails魔法将完成剩下的工作。或
  2. 在写入输出文件之前,将timestamp转换为date数据类型。一个简单的updated_at.to_date将完成这项工作。