2010-08-01 125 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

相关问题