Почему мое поле create_on изменяется при обновлении записи? - PullRequest
0 голосов
/ 01 августа 2010

Когда я сохраняю запись квартиры в рельсах, она по какой-то причине обновляет поле updated_on и поле create_on. Я не могу понять, как / почему поле create_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!

Так что я думаю, вопрос в том, что могло бы изменить мое значение create_on, но не отображаться в файле журнала rails?

РЕДАКТИРОВАТЬ: я знаю, что поле create_on меняется, потому что, когда я делаю запрос sql для проверки, значение обновляется, чтобы быть таким же, как поле updated_on. Кроме того, я показываю значение create_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 голосов
/ 05 августа 2010

Основываясь на предложении Криса Генри, я посмотрел определение таблицы и изменил значение по умолчанию с "CURRENT_TIMESTAMP" на "0000-00-00 00:00:00".Это решило проблему, хотя я не понимаю, почему это будет иметь значение в моем случае

0 голосов
/ 01 августа 2010

Почему бы вам не использовать create_at / updated_at (rails будет обрабатывать их для вас)?

Обсуждение этого вопроса в Ruby Forum в 2008 году: здесь

Кажется, лучше использовать DATETIME для подобных вещей в Rails.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...