【发布时间】:2010-08-01 00:05:04
【问题描述】:
当我在 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
【问题讨论】:
-
是什么让您认为您的 created_on 字段正在发生变化?
-
我知道 created_on 字段正在发生变化,因为当我执行 sql 查询检查时,该值已更新为与 updated_on 字段相同。此外,我向我的用户显示 created_on 值,这正是引起我注意的原因。
-
你应该发布你的表定义。听起来好像您的 created_on 列正在使用
ON UPDATE选项。 -
在 MySQL 中运行
SHOW TRIGGERS的输出是什么?
标签: mysql ruby-on-rails