當我在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
是什麼讓你覺得你的created_on字段正在改變? – jdl 2010-08-01 00:12:00
我的猜測是一個默認約束:http://dev.mysql.com/doc/refman/5.0/en/timestamp.html – 2010-08-01 00:14:48
我知道created_on字段正在改變,因爲當我做一個sql查詢來檢查,值已更新爲與updated_on字段相同。另外,我向用戶顯示created_on值,這是我引起我注意的一個問題。 – Janak 2010-08-01 00:35:31