2016-11-07 11 views
0

私は電子メールを送信するためにdelyed_jobsメカニズムを使用しています。ユーザーが「send_reports_at」という新しいフィールドを追加する必要があり、ユーザーがそれをクリックすると という名前の新しいフィールドが必要な場合、カレンダーコントロールに日付と時刻が表示され、ユーザーがメールを選択したときに配信される必要があります。delayed_jobsや他の方法を使って複数のメールを複数のユーザーが同時に複数のユーザーに送信する方法はありますか?

多くの人が私にスケジューラとcronジョブを使用するように勧めましたが、私は全く新しいです。一部のR & Dでは、delayed_jobsでrun_at機能を使用しました。 一度に複数のメールが送信されるため、正しいかどうかわかりません。しかし、それは以前は動作していましたが、そうではありませんでした。

def send_report_email 
    send_to_agents = params.has_key?("send_to_agents") && params["send_to_agents"] == "true" 
    if @report.update_attributes(params[:report]) 
     set_photo_position(false) 
     @report.save 

     @good_emails.each do |email| 
     if @report.send_reports_at =="" 
      ReportMailer.delay.additional_emails(email, @user, @report) 
     else 
      report_time = Time.zone.parse(@report.send_reports_at).utc 
      ReportMailer.delay(run_at: report_time).additional_emails(email, @user, @report) 
     end  
     end 
     ReportMailer.delay.report_sent(@user, @report, @good_emails, @bad_emails, @unsubscribed_emails) 
    end 

    respond_to do |format| 
     format.json { render :json => { :success => true, :report_id => @report.id, :redirect => user_reports_url(current_user), :notice => 'Report was successfully sent!' } } 
    end 

エンド

これを継続する方法を助けてください: これは私のコントローラのコードですか?

答えて

0

ループしないでください。@good_mails。単一の遅延ジョブタスクですべての良好なメールを送信します。内部のロジックを変更してadditional_emails @ goodメールの配列を受け取ってそこにループするようにしてください。

def send_report_email 
    send_to_agents = params.has_key?("send_to_agents") && params["send_to_agents"] == "true" 
    if @report.update_attributes(params[:report]) 
    set_photo_position(false) 
    @report.save 
    if @report.send_reports_at =="" 
     ReportMailer.delay.additional_emails(@good_emails, @user, @report) 
    else 
     report_time = Time.zone.parse(@report.send_reports_at).utc 
     ReportMailer.delay(run_at: report_time).additional_emails(@good_emails, @user, @report) 
    end  
    ReportMailer.delay.report_sent(@user, @report, @good_emails, @bad_emails, @unsubscribed_emails) 
    end 

respond_to do |format| 
    format.json { render :json => { :success => true, :report_id => @report.id, :redirect => user_reports_url(current_user), :notice => 'Report was successfully sent!' } } 
end 
end 

これが役立ちます。

関連する問題