如何在使用 Rails Mailer Preview 时保持干净的开发数据库

How to keep a clean development DB while using Rails Mailer Preview

如果你和我一样,你的开发RailsBD就是为了捏造一些数据。即使不是一切都像我的生产数据库那样完美,我也尽量不插入那么多垃圾数据,这样我至少可以控制我的开发预期。

通过使用 FactoryBot 或普通 RoR,您可以在内存中创建对象和 运行 RoR 开发版本中非常好的 ActionMailer::Preview 工具。如果您必须调整 HTML 和 CSS.

,这将为您节省大量时间

但是需要 BD 访问权限的视图呢?这发生在我身上,因为我需要 table 来显示数据库中的一些用户信息。

如果您使用创建或 FactoryBot.create,您最终会在 BD 中得到很多您并不真正需要的记录。

接下来的问题是如何在预览器之后管理数据清理 运行?

根据我朋友的建议,他想出了一个像这样的环绕过滤器的想法。

class UserMailerPreview < ActionMailer::Preview

  def welcome_email
    around_email do
      UserMailer.with(user: user).welcome
    end
  end

  private 

  def user 
    @user ||= FactoryBot.create(:user)
  end 

  def around_email
    message = nil
    begin
      ActiveRecord::Base.transaction do 
        message = yield 
        message.to_s # This force the evaluation of the message body instead of the lasy render
        raise ActiveRecord::Rollback
      end
    rescue ActiveRecord::Rollback
    end
    message
  end
end

这个可爱的技巧将创建您需要的所有数据、呈现电子邮件正文并清理数据库。因此,您可以为电子邮件创建尽可能多的垃圾邮件,而不会增加您的个人工作负担。