如何在使用 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
这个可爱的技巧将创建您需要的所有数据、呈现电子邮件正文并清理数据库。因此,您可以为电子邮件创建尽可能多的垃圾邮件,而不会增加您的个人工作负担。
如果你和我一样,你的开发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
这个可爱的技巧将创建您需要的所有数据、呈现电子邮件正文并清理数据库。因此,您可以为电子邮件创建尽可能多的垃圾邮件,而不会增加您的个人工作负担。