概要
previewのたびにレコードを作成するのは嫌だ。
buildしたものを使うことで回避できそうだがActiveRecord_Associations_CollectionProxy
に対しorder
を使っている部分があるとDBを探しにいってしまい、空配列が返ってしまう。
order
ではなくsort_by
を使うとindexが効かなくなる
なので一旦レコードを作成してしまい、メールをrenderした後にrollbackする。
方法
config/initializers/mailer_previews.rb
module RollbackingAfterPreview
def preview
ActiveRecord::Base.transaction do
super
raise ActiveRecord::Rollback
end
end
end
Rails.application.config.after_initialize do
class Rails::MailersController
prepend RollbackingAfterPreview
end
end