2016-11-05 21 views
1

我正在使用ActiveRecord 4.2.4來處理數據庫。Ruby + ActiveRecord:如何配置導致'yyyy-mm-dd'日期格式的日期字段?

一些背景資料:

  • 紅寶石 '1.9.3'
  • ActiveRecord的 '4.2.4'
  • 黃瓜 '2.1.0' 我不使用Rails

我最近就遇到了這個問題,這是產生顯示輸出文件:在

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

但不想要的東西「2016年10月26日9時54分06秒UTC」 UPDATED_DATE,我只期望「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文件中?請分享您的解決方案。

回答

0

當你只在最後一次更新,而不是時間的日期興趣的話,那麼有兩種選擇:

  1. 不要在數據庫中使用一個updated_attimestamp列。相反,使用updated_ondate列和Rails魔術會完成剩下的工作。或
  2. 在寫入輸出文件之前將timestamp轉換爲date數據類型。一個簡單的updated_at.to_date將完成這項工作。