2014-06-09 28 views
0

我通過Rails將DateTime.now保存到MySQL DB的datetime列中,但似乎保存了不正確的值。 保存的值是過去幾十秒。通過Rails的update_all方法將錯誤時間保存到MySQL DB中

我的代碼:

Rails.logger.info("Start: Calendars.where('user_id = ? and calendar_id = ?', @user.id, calendar_id)") 

target = Calendars.where('user_id = ? and calendar_id = ?', @user.id, calendar_id) 

Rails.logger.info("End: Calendars.where('user_id = ? and calendar_id = ?', @user.id, calendar_id)") 

Rails.logger.info("last_clone_at update start") 
now = DateTime.now 
target.update_all(last_clone_at: now) 

Rails.logger.info(now.strftime("%Y-%m-%dT%H:%M:%S")) # Output by DateTime.now 
Rails.logger.info(target.first.last_clone_at) # Saved datetime value 

日誌輸出:

2014-06-09 14:39:03 INFO last_clone_at update start 
2014-06-09 14:39:03 INFO 2014-06-09T14:39:03 # Output by DateTime.now 
2014-06-09 14:39:03 INFO 2014-06-09 14:38:00 +0900 # Saved datetime value 

我的日曆模式就是如下:

class Calendars < ActiveRecord::Base 

    # Validations 
    validates :user_id, presence: true 
    validates :calendar_id, presence: true, uniqueness: { scope: :user_id } 
end 

我用:

  • 紅寶石2.0
  • 滑軌4.0.5
  • MySQL的37年5月5日(從Ubuntu的14.04庫)

更新: 日誌輸出的其它實例:

2014-06-09 16:28:54 INFO last_clone_at update start 
2014-06-09 16:28:54 INFO 2014-06-09T16:28:54 
2014-06-09 16:28:54 INFO 2014-06-09 16:28:01 +0900 

2014-06-09 16:28:55 INFO last_clone_at update start 
2014-06-09 16:28:55 INFO 2014-06-09T16:28:55 
2014-06-09 16:28:55 INFO 2014-06-09 16:28:02 +0900 

2014-06-09 16:28:57 INFO last_clone_at update start 
2014-06-09 16:28:57 INFO 2014-06-09T16:28:57 
2014-06-09 16:28:57 INFO 2014-06-09 16:28:04 +0900 

UPDATE2: 時間(...)

2014-06-09 17:22:06 INFO開始:Calendars.where('user_id =? ('user_id =?和calendar_id =?',@ user.id,calendar_id)

+1

嘗試設置日誌級別進行調試(以便執行的sql語句被記錄) - 看到這些會很有趣。 –

+0

這是個好主意。我將查看SQL日誌。 –

回答

0

我認爲這是可能的。 update_all可能對您的數據庫「重」操作,並且需要一些時間來更新記錄(檢查您的日誌)。

嘗試改變輸出:

Rails.logger.info(DateTime.now.strftime("%Y-%m-%dT%H:%M:%S")) 
target.update_all(last_clone_at: DateTime.now) 
Rails.logger.info(target.first.last_clone_at)` 

我想用這種方式,你得到多少「更接近」的價值觀。

+0

我發表了這篇文章後,我也嘗試了與您的建議類似的方式,但仍保存價值和實際價值是不同的。我稍後會編輯代碼。 –

+0

是的,他們應該是不同的,因爲「時間飛逝」:)但在第二種情況下,差異應該很小我認爲應該少於0.1秒 – gotva

+0

不幸的是,仍然有54秒的差異。 –

相關問題