По моему мнению, у вас есть правильная идея использовать обратный вызов, вот как это можно реализовать.
class User < ApplicationRecord
after_save :track_sign_in_count
private
def track_sign_in_count
if sign_in_count_changed?
OtherTable.create!()
end
end
end
Я использую обратный вызов after_save
, который будет срабатывать каждый раз, когда пользователь запись обновлена или создана. Однако мы использовали встроенный метод sign_in_count_changed?
, поэтому он создаст новую запись в OtherTable
, только если sign_in_count
действительно изменился.
Внутри обратного вызова вы можете использовать self
, чтобы получить модель, которая обновляется или создается, так что вы можете получить из нее другие атрибуты, такие как отметки времени или все, что вам нужно.
Примечание: если sign_in_count
не изменяется при создании исходной пользовательской записи, вы можете измените обратный вызов на after_update
, чтобы он выполнялся только тогда, когда запись пользователя обновлена и не создана.