Могу ли я поставить временную метку в определенном поле в db рельсов? - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть форма с флажком, который пользователи отмечают, чтобы дать согласие. Когда эта форма публикуется, таблица «Пользователи» обновляется полем, подтверждающим, что предоставлено согласие. Однако я также хочу записать дату / время, когда было предоставлено согласие. С этой целью я надеялся получить поле user_consent, в котором будет храниться поле yes, и поле user_consent_agreed, в котором будет храниться дата / время обновления поля user_consent.

Я знаю, что могу добавить метки времени в таблицу при создании, но это изменится при обновлении любого атрибута, мне нужно записывать время / дату в собственном поле при изменении атрибута согласия.

Ответы [ 2 ]

0 голосов
/ 16 ноября 2018

Как уже предлагалось, добавьте столбец consented_at для хранения метки времени.

Чтобы автоматически обновлять этот столбец при изменении значения consented, добавьте обратный вызов before_save для вашей модели:

class User < ApplicationRecord

  before_save do
    self.consented_at = Time.zone.now if consented_changed?
  end

end

Обратите внимание, что при любом изменении consented_at будет установлено на consented, даже если установлено значение false.Если это не то, что вам нужно, вы можете настроить код внутри обратного вызова по желанию.

См. https://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html для получения дополнительной информации о обратных вызовах модели.См. https://api.rubyonrails.org/classes/ActiveModel/Dirty.html для получения дополнительной информации о том, как обнаружить изменения.

0 голосов
/ 15 ноября 2018

Я бы просто имел один столбец в таблице consented_at, который имеет тип DateTime.Когда они согласятся, вы обновите этот столбец:

user.update_column :consented_at, DateTime.now

Я использовал consented_at, чтобы сохранить его в строке с created_at и updated_at

Таким образом,Вы можете сказать, согласился ли человек или нет, и когда он дал согласие (если он это сделал).

if user.consented_at?
  # consented and you have the time in consented_at
else
  # never consented
end

Нет реальной необходимости иметь столбец boolean и время, так как проверка столбца времени вернет trueили все равно ложь.

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