2010-08-01 156 views
0

當我在rails中保存一個公寓記錄時,出於某種原因,它正在更新updated_on字段 created_on字段。我無法弄清楚爲什麼created_on字段正在更新。爲什麼更新記錄時,我的created_on字段會發生變化?

要嘗試和調試的情況下,我打開了一個控制檯窗口,並做了以下

t = Apartment.find(11619) 
t.beds = 4 
t.save 

當我檢查我的日誌文件,我看到下面的

SQL (0.0ms) BEGIN 
    Apartment Load (0.0ms) SELECT `apartments`.id FROM `apartments` WHERE (`apartments`.`unit_num` = BINARY '2005' AND `apartments`.building_id = 17755 AND `apartments`.id <> 11619) LIMIT 1 
    Apartment Load (0.0ms) SELECT * FROM `apartments` WHERE (`apartments`.`id` = 11619) 
    Apartment Update (0.0ms) UPDATE `apartments` SET `beds` = 4.0, `updated_on` = '2010-07-31 19:54:10' WHERE `id` = 11619 
    SQL (0.0ms) COMMIT 

這只是說明updated_on字段正在改變!

所以我想問題是,什麼可以改變我的created_on值,但沒有出現在軌道日誌文件?

編輯:我知道created_on字段正在改變,因爲當我做一個sql查詢來檢查,值已被更新爲與updated_on字段相同。另外,我向用戶顯示created_on值,這是我引起我注意的一個問題。

編輯2:表定義如下。我似乎已經通過將默認值從「CURRENT_TIMESTAMP」更改爲「0000-00-00 00:00:00」來解決我的問題,但我不明白爲什麼這會有所作爲?

Field Type Null Key Default Extra 
id int(10) unsigned NO PRI \N auto_increment 
building_id int(10) unsigned YES MUL 0 
unit_num varchar(45) YES   
beds float YES MUL \N 
rent int(10) unsigned YES MUL 0 
date_available date YES  \N 
on_market tinyint(1) YES  0 
floor varchar(10) YES  \N 
fee_paid int(10) YES  0 
note blob YES  \N 
created_by int(10) unsigned YES  1 
updated_by int(10) unsigned YES  1 
created_on timestamp NO  CURRENT_TIMESTAMP 
updated_on timestamp NO  0000-00-00 00:00:00 
lease_expiration_date date YES  \N 
on_market_date date YES  \N 
off_market_date date YES  \N 
tenant_name varchar(40) YES  \N 
tenant_number varchar(40) YES  \N 
baths float YES  1 
public_note blob YES  \N 
public_title text YES  \N 
key_note blob YES  \N 
status varchar(40) YES  Off Market 
app_pending tinyint(1) YES  0 
app_pending_date date YES  \N 
+0

是什麼讓你覺得你的created_on字段正在改變? – jdl 2010-08-01 00:12:00

+0

我的猜測是一個默認約束:http://dev.mysql.com/doc/refman/5.0/en/timestamp.html – 2010-08-01 00:14:48

+0

我知道created_on字段正在改變,因爲當我做一個sql查詢來檢查,值已更新爲與updated_on字段相同。另外,我向用戶顯示created_on值,這是我引起我注意的一個問題。 – Janak 2010-08-01 00:35:31

回答

0

根據Chris Henry的建議,我查看了我的表格定義並將默認值從「CURRENT_TIMESTAMP」更改爲「0000-00-00 00:00:00」。這解決了這個問題,但我不明白爲什麼這會對我的情況產生影響

0

你爲什麼不使用created_at /的updated_at(軌道將處理這些你)?

在紅寶石論壇關於這個早在2008年的討論是here

看來,最好是使用DATETIME做這幾樣在Rails的東西。

+0

created_on/updated_on的處理方式與created_at/updated_at相同,rails正在更新當前字段 – Janak 2010-08-02 04:36:13

相關問題