Инициировать отправку электронной почты, когда логическое поле модели рельсов установлено в значение true вместо false - PullRequest
1 голос
/ 17 октября 2011

У меня в приложении две модели.Семьи имеет множество людей.принадлежит частному лицу.

Я пытаюсь сделать так, чтобы, когда булево поле в модели Семейства было установлено в "true", электронное письмо отправлялось на все адреса электронной почты, сохраненные для Индивидуалов, когда семья "обновляется".

Может кто-нибудь помочь с этим?Мне удалось заставить ActiveMailer отправлять электронное письмо, когда человек создается достаточно легко, но не могу найти способ инициировать обновление определенного поля?

Любая помощь будет принята с благодарностью!

Ответы [ 3 ]

3 голосов
/ 17 октября 2011

Тоби имеет правильную идею, но я не согласен с тем, что это должно быть реализовано в контроллере ... это гораздо лучше подходит для обратного вызова модели after_update. как то так:

def update_fired
  if yourfield_changed?
     #send mail here
  end
end

Затем просто убедитесь, что в вашей модели установлен метод обратного вызова after_update

2 голосов
/ 17 октября 2011

Может быть, вы могли бы использовать фильтр после?

на модели Family

after_update :email_individuals


private
def email_individuals
  if boolean_field_changed?
    individuals.each do |i|
      // send out emails here
    end
  end
end

Следующим шагом будет перемещение этого из цикла запроса в очередь.

Надеюсь, я правильно понял ваш вопрос.

0 голосов
/ 17 октября 2011

Самый простой способ - добавить что-то к действию обновления вашего контроллера.

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

В Rails есть API для обнаружения изменений в полях модели (в приведенном выше случае вы добавляете _changed? К имени поля ион сообщит вам, если поле было изменено.

...