更新,最后,解决方案是将其移动到用户模型而不是配置文件。请注意,在个人资料中,我必须检查obj.owner.email
。似乎到达配置文件时,obj.owner(用户)已经保存,并且没有任何条件通过。
这适用于其他模型。
我想要做的是限制当users表中的电子邮件字段从空白到有效电子邮件时发送电子邮件的次数。我尝试了几种回调方法,但那些是causing some problems。
我没有在观察员身上找到太多信息。我知道你可以在那里做所有的回调方法,但无论如何要检查一个字段吗?
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
我之前使用过保存,因为我的理解是.changed?如果after_save或after_commit,将始终为false。我错了吗?
我认为它可能是after_transaction部分 - 但日志消息甚至没有写入日志文件。
答案 0 :(得分:1)
尝试:
before_save :foo, :if => lambda {|obj| obj.field_name_changed? && obj.field_name == true }
def foo
#whatever you need
end
答案 1 :(得分:0)
你可能想看看acts_as_versioned(https://github.com/technoweenie/acts_as_versioned)或acts_as_audited(https://github.com/collectiveidea/acts_as_audited)这样你知道以前的电子邮件地址,并决定是否用观察者代码发送电子邮件。