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



如果你和我一样,你的开发Rails BD就是为了伪造一些数据。即使不是所有的东西都像我的生产数据库一样完美,我也尽量不插入太多垃圾数据,这样我至少可以控制我的开发预期。

通过使用FactoryBot或普通RoR,您可以在内存中创建对象,并在RoR的开发版本中运行非常好的ActionMailer::Preview工具。如果你必须调整HTML和CSS,这将为你节省大量时间。

但是,对于需要BD访问的视图呢?这种情况发生在我身上,因为我需要一个表来显示数据库中的一些用户信息。

如果你使用create或FactoryBot.create,你的BD中会有很多你并不真正需要的记录。

那么问题是如何在预览程序运行后管理数据的清理?

根据我朋友的建议,他想出了一个像这样的around过滤器的主意。

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

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

最新更新