我的应用程序中有两个模型。家庭 has_many 个人的。个人的belongs_to 家庭。
我正在尝试这样做,以便当家庭模型中的布尔字段设置为“真”时,当家庭“更新”时,一封电子邮件将发送到针对个人存储的所有电子邮件地址。
有人能帮忙吗?我已经能够在足够轻松地创建个人时让 ActiveMailer 发送电子邮件,但找不到触发特定字段更新的方法?
任何帮助将不胜感激!
我的应用程序中有两个模型。家庭 has_many 个人的。个人的belongs_to 家庭。
我正在尝试这样做,以便当家庭模型中的布尔字段设置为“真”时,当家庭“更新”时,一封电子邮件将发送到针对个人存储的所有电子邮件地址。
有人能帮忙吗?我已经能够在足够轻松地创建个人时让 ActiveMailer 发送电子邮件,但找不到触发特定字段更新的方法?
任何帮助将不胜感激!
Toby 有正确的想法,但我不同意这应该在控制器中实现......这更适合模型 after_update 回调。像这样的东西:
def update_fired
if yourfield_changed?
#send mail here
end
end
然后只需确保在您的模型中将方法设置为 after_update 回调
也许你可以使用后过滤器?
关于家庭模型
after_update :email_individuals
private
def email_individuals
if boolean_field_changed?
individuals.each do |i|
// send out emails here
end
end
end
下一步是将其移出请求周期并进入队列。
希望我能正确理解你的问题。
最简单的方法是在控制器的更新操作中添加一些内容
if individual.boolean_field_changed? and individual.boolean_field
individuals.each do |ind|
Mailer.deliver_mail(ind)
end
end
Rails 有一个用于检测模型字段更改的 API(在上述情况下,您将 _changed? 添加到字段名称中,它会告诉您该字段是否已更改。