Поле create_at иногда становится нулевым - PullRequest
8 голосов
/ 30 ноября 2011

Я думаю, что created_at всегда установлено на время записи, созданной ActiveRecord, но я обнаружил, что некоторые записи создаются с нулевым created_at.Есть ли какое-либо условие, чтобы вызвать это?

Ответы [ 3 ]

1 голос
/ 21 сентября 2012

Эти столбцы create_at, updated_at, creation_on, updated_on автоматически обрабатываются для вас rails.

Однако есть несколько примечаний:

  1. Не изменять значение attr (т. Е. created_at должно быть равно нулю до создания и не должно изменяться до обновления ). В противном случае ActiveRecord не будет обновлять значение attr с текущим временем.
  2. Убедитесь, что для <ClassName>.record_timestamps установлено значение true.

Кроме того, я бы предложил вам добавить ненулевое ограничение к этим столбцам:

change_column :<table_name>, :created_at, :datetime, :null => false

Таким образом, вы будете уверены, что этот столбец всегда имеет ненулевое значение.

1 голос
/ 27 сентября 2012

Используете ли вы attr_accessible или attr_protected на вашей модели?

Поскольку без этих основных средств защиты любой запрос на обновление мог бы устанавливать эти непроверенные и незащищенные атрибуты.

Безопасность массового назначения

0 голосов
/ 20 сентября 2012

Единственное, о чем я сейчас могу подумать, это то, что, возможно, вы перезаписываете атрибут created_at в своем представлении.

<%= t.text_field :created_at %>

И значение, которое вы передаете при отправке формы, неправильно конвертируется ActiveRecord и становится nil.
created_at не предназначен для манипулирования, лучше создать другое поле, например creation_date, и оставить его заполненным по умолчанию. Но это только предположение.

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