Ruby on rails 当rails模型布尔字段设置为true而不是false时触发电子邮件发送

Ruby on rails 当rails模型布尔字段设置为true而不是false时触发电子邮件发送,ruby-on-rails,email,triggers,mailer,Ruby On Rails,Email,Triggers,Mailer,我的应用程序中有两个模型。家庭有许多个人的。个人的财产属于家庭 我正试图这样做,当家庭模型中的布尔字段设置为“true”时,当家庭“更新”时,会向针对个人存储的所有电子邮件地址发送电子邮件 有人能帮忙吗?我已经能够让ActiveMailer在创建个人时发送电子邮件,但找不到在更新特定字段时触发的方法 任何帮助都将不胜感激 最简单的方法是在控制器的更新操作中添加一些内容 if individual.boolean_field_changed? and individual.boolean_fiel

我的应用程序中有两个模型。家庭有许多个人的。个人的财产属于家庭

我正试图这样做,当家庭模型中的布尔字段设置为“true”时,当家庭“更新”时,会向针对个人存储的所有电子邮件地址发送电子邮件

有人能帮忙吗?我已经能够让ActiveMailer在创建个人时发送电子邮件,但找不到在更新特定字段时触发的方法


任何帮助都将不胜感激

最简单的方法是在控制器的更新操作中添加一些内容

if individual.boolean_field_changed? and individual.boolean_field
  individuals.each do |ind|
    Mailer.deliver_mail(ind)
  end
end

Rails有一个API,用于检测模型字段中的更改(在上述情况下,您将“更改”添加到字段名中,它将告诉您字段是否已更改。

最简单的方法是向控制器的更新操作添加一些内容

if individual.boolean_field_changed? and individual.boolean_field
  individuals.each do |ind|
    Mailer.deliver_mail(ind)
  end
end

Rails有一个API,用于检测模型字段中的更改(在上述情况下,您将_changed?添加到字段名中,它会告诉您字段是否已更改。

托比的想法是正确的,但我不同意这应该在控制器中实现……这更适合于更新回调后的模型。类似这样的情况:

def update_fired
  if yourfield_changed?
     #send mail here
  end
end

然后确保在您的模型中,您将方法设置为更新后回调

Toby的想法是正确的,但我不同意这应该在控制器中实现……这更适合于更新后回调的模型。类似于:

def update_fired
  if yourfield_changed?
     #send mail here
  end
end

然后确保在您的模型中将方法设置为after_update回调

也许您可以使用after筛选器

论家庭模式

after_update :email_individuals


private
def email_individuals
  if boolean_field_changed?
    individuals.each do |i|
      // send out emails here
    end
  end
end
下一步是将其移出请求周期并放入队列


希望我正确地回答了你的问题。

也许你可以使用后过滤器

论家庭模式

after_update :email_individuals


private
def email_individuals
  if boolean_field_changed?
    individuals.each do |i|
      // send out emails here
    end
  end
end
下一步是将其移出请求周期并放入队列


希望我正确地回答了您的问题。

好的。谢谢。但是这是在Families控制器中,还是在individuals控制器中?同时,正在更改的字段是针对family而不是针对个人存储的。如果family.boolean_field_更改了?和family.boolean_field individuals邮递员。投递邮件(ind)end end认为其他人是对的,将其添加到模型中,而不是控制器中。是的,将其添加到任何具有值的对象中。任何一个都可以使用相同的值。好的。谢谢。但这是在“族”控制器中,还是在“个人”控制器中?同时,正在更改的字段是针对“族”而不是针对“个人”存储的。如果family.boolean\u字段发生更改,以及family.boolean\u字段中的个人。每个人都可以发送邮件(ind)end end认为其他人是对的,将其添加到模型中,而不是控制器中。是的,将其添加到任何具有值的对象中。任何一个都是一样的。非常感谢。我一直在靠近。我现在收到一个错误,关于#的`未定义方法'消息_id',个人:…);不太确定如何解决。我收回这句话。我刚收到大约20封电子邮件!工作得很有魅力。谢谢!太棒了。如果需要我,请随时在twitter@mattallen上联系我。非常感谢。我一直在靠近。我现在收到一个错误,关于#,个人:…)的“未定义方法”消息;不太清楚怎么解决,我收回了。我刚收到大约20封电子邮件!工作得很有魅力。非常感谢。令人惊叹的。如果需要,请随时在twitter@mattallen上联系我。作为此问题的扩展,是否有任何方法使其不依赖于
“boolean\u field\u changed?”
,而是在值为
true
而不是
false
时触发电子邮件。作为此问题的扩展,有没有办法使它不依赖于
“boolean\u field\u changed?”
,而是在值为
true
时触发电子邮件,而不是
false
?。我喜欢在前面添加条件:
更新后:更新\u激发,:if=>“yourfield\u changed?”
。我想在前面添加条件:
在\u update:update\u激发之后,:if=>“yourfield\u changed?”