現在、delayed_job(gem delayd_job_mongoid)を呼び出して、確認メールを送信しています。ただし、渡した最新のデータを使用していないようで、代わりにキャッシュされたバージョンを使用しています。下記参照:
私のコントローラー:
...
_user.calculate_orders
_user.save
_user.reload
Mailer.delay.order_reported(_user)
...
メーラー
class Mailer < Devise::Mailer
def order_reported(to_user)
@to_user = to_user
email_with_name = "#{@to_user.name} <#{@to_user.email}>"
mail(:to => email_with_name, :subject => "Test email")
end
end
たとえば、属性_user.total_orders
= 3が5に更新され、保存された場合。これはデータベースに正しく反映され、遅延ジョブDBレコードには更新された情報5が含まれますが、電子メールが送信されると、キャッシュされた情報3が使用されます。
Railsコンソールからメソッドを呼び出してみました。
これは機能し、渡されて更新された情報のパラメーターを使用します
Mailer.order_reported(u).deliver
これは機能せず、キャッシュされたデータを使用します
Mailer.delay.order_reported(u)