更新时,如果先前的值=!我正在尝试发送电子邮件 发布并发布新值。我尝试了 after_save、before_action...
如果例如
@ad.status ==“待处理”并更新为“已发布”
@ad.status_was != '已发布' 返回 true
class Shop::AdsController < Admin2Controller
before_action :set_ad, only: %i[edit update destroy]
before_action :send_notification_if_published, only: :update
def send_notification_if_published
return unless @ad.status_was != 'published' && @ad.status_published?
notification = Notification.find_by(action: 'ad_published')
subscribed_users = User.joins(:notification_preferences)
.where(notification_preferences: { notification_id: notification.id })
subscribed_users.each do |user|
NotificationsMailer.new(user, notification, self).deliver_later
end
end
end
在before_action
@ad
中是你从 中得到的set_ad
。它还没有更新,新的ad_params
还没有分配。所以@ad.status
和@ad.status_was
都是pending
。在控制器中,您可以使用
after_action
,或者只是将其付诸update
实践,因为您需要知道广告实际上已成功更新。在模型中
after_update
应该这样做。status_was
改变属性后使用。status_previously_was
保存这些更改后使用。