如何存储/提供用户可自定义的HTML模板?

时间:2012-02-15 21:17:24

标签: ruby templates mongodb template-engine tumblr

我想提供类似tumblr的功能,您可以在其中选择模板,并可选择在浏览器中自定义模板的HTML并保存。

当前堆栈:用于原型的Mongo,Sinatra(用于REST API)。稍后可能会转向编译的静态类型语言。

想知道如何最好地实现这一目标。我考虑过的选项:

  1. 将HTML存储在mongo中,并为所有用户帐户复制它。因此,您选择的模板的HTML会写入您的帐户。空间效率低下的显而易见的缺点,需要更新使用该模板的所有用户(如果未定制 - 如果模板更改,则自定义它将成为您自己的,我将不会触摸它)。

  2. 将模板存储在模板集合中,并将自定义模板放入同一个集合中,或者放入具有模板所有者的用户集合中。用户引用模板ID。这显然比我相信的好1。特别是因为每次拉动用户对象时我都不需要拉模板。

  3. 某些第三方图书馆?在这里公开建议。

  4. 文件系统。

  5. 我需要打包这些模板(插入js和用户不应该暴露的东西),然后提供它们。关于如何最好地接近这一点的任何建议都非常感谢。

1 个答案:

答案 0 :(得分:2)

您的方法将取决于您预测人们定制模板的频率与仅使用标准。混合方法怎么样?

也就是说,在用户文档中有一个懒惰(使用中)创建的字段,该字段可以存储自定义模板,也可以是其中一个标准的差异(不确定您计划允许的自定义级别) )。

然后,您可以拥有上面2中描述的模板字段,并为自定义模板设置“特殊”设置。虽然您每次都对拉模板感到担忧,但您确实知道这些是一些更专注的用户 - 保存到数据库的行程可能是有利的,或者您可能不关心。

如果您不关心每个用户2次访问数据库,那么您可以采用方法2,将自定义模板添加到模板集合中,并为每个自定义用户引用新ID。

这是一种平衡行为 - 是每次都值得保存往返数据库的模板拉动模板的额外数据开销,还是希望每次以多次查询为代价获得的数据效率数据库 - 只有你可以根据你设计应用程序的方式以及人们如何使用它来回答这个问题。

对于链接的方法,您可能需要查看MongoDB文档中的Database ReferencesSchema Design