0

私はこれを間違っていると感じているので、これは概念的な質問のようなものです。

いくつかの条件を満たす一部のユーザーにメールを送信する必要があります。私が今持っているのは次のとおりです。

1)基本的にこれを行うタスク:

users = User.includes(:aptitudes).where({:role => ['Boy','boy','kid'], :aptitudes => {:name =>'Good'} })
users.each do |user|
  MyMailer.report(user).deliver
end

2)MyMailerのレポートメソッドには、いくつかのことがあります。

def report(user)

    @user = user
    @value = @user.value

    @travels = @user.travels.where(:end_at)

    @rewards = @user.rewards

    # More logic depending of values of User.

...

end

何が起こるかというと、メーラー自体では、オブジェクト@userの特定のプロパティまたは属性が、送信される電子メールに対して満たされない場合があります。メーラーに渡すすべてのユーザーにメールが送信されるようにするには、どこにすればよいのでしょうか。これらのチェックを行うために、レーキに新しいメソッドを作成しますか?それともどうしますか?

4

1 に答える 1

1

一般的に言って、名前が意図を十分に明らかにしている限り、あなたは好きなように行うことができます。

実装を知らずにこのMyMailerオブジェクトを使用するように指定したreport場合、要求されたときに送信し、それ自体の気まぐれからフィルターで除外しないことを期待します...最終的には他の問題(送信の失敗、遅延、再試行など)に対処します。 )しかし、私がそれにユーザーを与えるとき、私はそのユーザーが電子メールで送られることを望みます。

だから、あなたの質問に答えるために、はい、私はメーラーを呼び出す前にすべてのユーザーを除外するか、またはそのようなものと呼ばれるメーラーのメソッドを定義しreport_only_those_usersてフィルタリングを処理します。

ちなみに、一度に1つずつループして送信しなくても、電子メールのリストをActionMailer (セクション2.3.4)に渡すことができます。

于 2012-12-06T11:52:37.687 に答える