我想将我网站的html组件存储在数据库中,以便用户每次都可以从各种组件中进行选择
例如:
一个页面样式的带有导航栏的html页面以及可以更改的部分和其他内容,它的布局可能包含以下内容:
<div id="nav-holder">
<!-- Nav html goes here -->
</div>
<div id="about-holder">
<!-- about section html goes here -->
</div>
<!-- other html stuff -->
我的数据库现在的结构是为模板提供每个部分的可能组件,并存储一个&#39;文本&#39;在它的html列中,我将所有样式和脚本添加到为整个布局加载的一个工作表和js文件中。
是否有最佳实践可以在我的数据库中存储和呈现这些组件?
我的主要目的是创建一个带有一些自定义的网站生成器,提供一组用户选择的模板,并且在一个模板中,他可以通过选择不同的组件(导航,关于部分......)来自定义他的模板。 p>
此外,我会从某个地方获取数据并将其填入这些模板用户将无法在此处修改数据,已经准备就绪所以没有必要使用户能够修改将在文档中填写的数据
答案 0 :(得分:1)
有没有最佳实践来存储和渲染我的组件 db?
是的,不要!由于多种原因,主要原因是您使用数据库持久存储与模型相关的变量。不是HTML。您的html的位置在您的视图中,您可以选择要在控制器中显示哪个html。
其他原因包括从数据库中读取html会降低应用程序响应速度,Rails会使数据库html中的文本安全,这意味着它不会自动表现为html。这是一种安全预防措施,因为一种非常常见的攻击方式是插入“坏”。代码进入您的数据库,然后在您恢复它时将其运行并提供给毫无戒心的用户。
使用部分。参考this Rails Guide
的第3.4节保存用户对数据库中组件的选择。如果他选择navbar_23,您将该9个字符的字符串存储在数据库中,并且根据请求,您的模板会为您提供视图文件夹中名为_navbar_23.html.erb的部分字符串。
例如,在您的views文件夹中,创建一个子文件夹视图/导航栏,在其中放置您的导航栏变体。 Partials以下划线开头,以.html.erb结尾
在您的模型中,将用户选择的导航栏存储在say user.navbar中。只是名称,而不是起始下划线或.html.erb
在您的模板中;
render partial: "views/navbars/" + user.navbar
Rails会在查找文件时自动添加下划线和.html.erb。