Как выполнить функцию, только если в ruby ​​/ rails выполняется условие отношения объекта? - PullRequest
0 голосов
/ 19 марта 2020

Мой вопрос, вероятно, не очень понятен и, вероятно, лучше всего иллюстрируется на примере ... У меня есть модель учетной записи, в которой много пользователей (которая принадлежит учетной записи). У меня также есть метод в почтовой программе, который я хочу запустить, только если учетная запись, с которой связан пользователь, имеет state из "active". По сути, пользователю следует отправлять электронное письмо только в том случае, если учетная запись активна. В настоящий момент метод в файле почтовой программы выглядит следующим образом.

  def pending_mail(document, user)
    @user = user

    mail(to: user.email, subject: t('emails.pending.subject') ... do |format|
      format.text
      format.html
    end    
  end

Ответы [ 2 ]

1 голос
/ 19 марта 2020

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

Это должно быть обработано в контроллере. Например:

class AccountsController < ApplicationController
  def update
    if @account.update(account_attributes)
      Accounts::UsersNotificationJob.perform_later if @account.active?
      redirect_to @account
    else
      render :new
    end
  end
end

module Accounts 
  class UsersNotificationJob
    def perform(account)
      account.users.each do |user|
        UserMailer.pending_mail(user).deliver
      end 
    end
  end
end
0 голосов
/ 19 марта 2020

Вы должны иметь доступ к своей учетной записи через user.account, в зависимости от того, как определена ваша модель. В этом случае вы можете просто использовать простой оператор if.

  if @user.account.state == "active"
    mail blabla do |format|
     .....
    end
  end

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...