0

Я знаю update_at и created_ate в рельсах. Но меня интересует возможность обновления поля в модели при обновлении другого поля. Вот что я пытался:как фиксировать время, когда поле обновляется

в моей модели:

protected 

    def update_email_sent_on_date 
    if self.send_to_changed? 
     self.date_email_delivered = DateTime.now 
    end 
    end 

и в одном месте в моем коде, который обновляет поле в вопрос:

distribution.send(:update_email_sent_on_date) 

проблема, это Безразлично Кажется, я ничего не делаю с моей таблицей db. Я даже попытался удалить чек на «send_to», но все равно ничего.

что я делаю неправильно?

+0

Эй, я думаю, что мой первоначальный ответ на другой вопрос, не совсем ясно, как это должно было быть. Я пересмотрел/улучшил объяснение. Возможно, попробуйте перечитать его и сделать этот метод 'private' вместо' protected'. Тогда вам не придется использовать 'send' для вызова метода. – Batkins

ответ

1

Вы не сохраняете его после внесения изменений.

Измените метод для этого:

def update_email_sent_on_date 
    if send_to_changed? 
    self.date_email_delivered = DateTime.now 
    save 
    end 
end 

Или сохранить модель после вызова его следующим образом:

distribution.update_email_sent_on_date 
distribution.save 
+0

Ни один из этих методов не работает ...? – Ramy

+0

Вы уверены, что 'send_to_changed?' Оценивает значение 'true' в этом случае? Возможно, попробуйте поставить тест 'puts' внутри блока' if', а затем перезапустить приложение и запустить его снова и убедиться, что он фактически выполняет этот блок. – Batkins

+0

Да, это был преступник. но почему? Каков правильный способ использования _changed? метод? – Ramy