为什么在更新记录时我的created_on字段会被更改?

时间:2010-08-01 00:05:04

标签: mysql ruby-on-rails

当我在rails中保存公寓记录时,由于某种原因,它正在更新updated_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值但却没有显示在rails日志文件中?

编辑:我知道created_on字段正在改变,因为当我执行sql查询检查时,该值已更新为与updated_on字段相同。此外,我向我的用户显示created_on值,这是我引起注意的错误。

EDIT2:表定义如下。我似乎通过将默认值从“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  

2 个答案:

答案 0 :(得分:0)

为什么不使用created_at / updated_at(rails会为你处理这些)?

Ruby Forum中关于2008年的讨论是here

使用DATETIME在Rails中执行这些操作似乎更好。

答案 1 :(得分:0)

根据Chris Henry的建议,我查看了我的表定义,并将默认值从“CURRENT_TIMESTAMP”更改为“0000-00-00 00:00:00”。这解决了这个问题,但我不明白为什么这会对我的情况产生影响