обновление, в конце концов, решение было перенести это на модель пользователя вместо профиля. Обратите внимание, что в профиле я должен проверить obj.owner.email
. Похоже, что к моменту достижения профиля obj.owner (пользователь) уже был сохранен и ни одно из условий не было выполнено.
Это работает в другой модели.
я хотел бы ограничить количество отправляемых писем, когда поле электронной почты в таблице пользователей меняется с пустого на действительное. Я пробовал пару методов обратного вызова, но они вызывают некоторые проблемы .
Я не нашел слишком много информации о наблюдателях. Я знаю, что вы можете использовать все методы обратного вызова, но есть ли возможность проверить одно поле?
profile.rb:
before_save :send_messages_after_registration!, :if => lambda {|obj| obj.owner.email_changed? && (obj.owner.email_was.nil? || obj.owner.email_was.blank?) }
def send_messages_after_registration!
Rails.logger.debug("Entered send_messages_after_registration! with email : " + self.owner.email.to_s)
after_transaction do
unless self.owner.email.blank?
Rails.logger.debug("email.blank? is false with email : " + self.owner.email.to_s)
JobSeekerNotifier.webinar_notification(self.owner.id).deliver
Resque.enqueue_in(48.hours, TrackReminderWorker, self.owner.id)
end
end
end
Я использовал перед сохранением, потому что мое понимание изменилось? всегда будет ложным, если after_save или after_commit. Я ошибаюсь?
На мгновение я подумал, что это может быть часть after_transaction - но сообщение журнала даже не записывается в файл журнала.