Ruby on rails Rails—将html模板存储在文件系统或数据库中
我正在构建一个可以被称为CMS的东西(至少在某些部分它是作为CMS运行的) 我读到“当然,你不应该把html代码放在数据库中”,但读到并看到一些人真的这么做了(这一点,或者),我怀疑解决我的问题的最佳方法 下面解释了我当前的问题和我当前的解决方案。也许最好的方法是把它放在数据库中,也许是把它保存在文件系统中,但另一种方式是我所做的 我构建的后台办公室(on)的管理员(即:开发人员,但也包括“营销人员”=>而不是普通公众/互联网访问者)可以转到Active Admin并创建“Modals” 例如,我可以在活动管理员的“创建新模式”中创建如下模式:name=>“2个文本、1个图像、1个视频的混合”和components=>{text1、text2、image1、video 1} 这将在我的表“模态”中创建一个新模态Ruby on rails Rails—将html模板存储在文件系统或数据库中,ruby-on-rails,ruby,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 4,我正在构建一个可以被称为CMS的东西(至少在某些部分它是作为CMS运行的) 我读到“当然,你不应该把html代码放在数据库中”,但读到并看到一些人真的这么做了(这一点,或者),我怀疑解决我的问题的最佳方法 下面解释了我当前的问题和我当前的解决方案。也许最好的方法是把它放在数据库中,也许是把它保存在文件系统中,但另一种方式是我所做的 我构建的后台办公室(on)的管理员(即:开发人员,但也包括“营销人员”=>而不是普通公众/互联网访问者)可以转到Active Admin并创建“Modals” 例如,
id= 37 (it's an example), name: "Mix of 2 texts, 1 image, 1 video", components = components => { text1, text2, image1, video 1 }
然后在active Admin中,管理员可以去创建一个新的“页面”(我的数据库中也有一个页面模型):
他能以身作则
标题:“标题示例”
情态动词:他将在选择下拉菜单中选择一个情态动词。假设他现在选择了模态37。
活动管理员将询问他,确定,然后请为此模式选择以下组件(重要:应用程序询问他这一点,因为我在数据库模式表中存储了模式=37的组件为text1、text2、image1和image2):
- 课文1-他可以写“这是介绍句”
- 文本2-他可以在这里写“一些文本”
- 图1——他写道
- 图2——他写道
Page.modal(:id =>8) =
[{"modal_id":"37",
"text1":"this is the intro sentence","text2":"some text",
"image1": "http://example.com/image1.png",
"image2":"http://example.com/image2.png"},
{ here we could have another modal for the same Page}
]
因此,当互联网用户将加载页面id=8,并且用户单击特定按钮时,它将加载模式8
page.html.erb上的代码
<% @page.modal.each_with_index do |modal, index| %>
<% index_plus_one = index + 1 %>
<div>
<span onclick="loadModalContent<%= modal['modal_id'] %>()">
<i class="fa fa-camera" aria-hidden="true"></i>
</span>
</div>
<script>
function loadModalContent<%= modal['modal_id'] %>() {
var msg;
msg = Messenger().post({
message: '<%= j render partial: "pages/modal#{ modal['modal_id'] }",
locals: { modal: modal, index: index_plus_one } %>'
});
}
</script>
<% end %>
<div>this is the first text <%= modal['text1'] %></div>
<div>this is the first image : <%= modal['image1'] %></div>
<div>this is the second text <%= modal['image1'] %></div>
<div>this is the second image <%= modal['image 2'] %></div>
函数loadModalContent(){
var-msg;
msg=Messenger().post({
消息:“”
});
}
如您所见,现在用户单击了按钮,应用程序将查看“modal”列,并将检查数组中的第一个id=37。因此,作为开发人员,在后台创建新模板(活动管理员)时,我们必须在文件系统中使用正确的id创建一个新的partial\u modal37.html.erb:
\u modal37.html.erb
<% @page.modal.each_with_index do |modal, index| %>
<% index_plus_one = index + 1 %>
<div>
<span onclick="loadModalContent<%= modal['modal_id'] %>()">
<i class="fa fa-camera" aria-hidden="true"></i>
</span>
</div>
<script>
function loadModalContent<%= modal['modal_id'] %>() {
var msg;
msg = Messenger().post({
message: '<%= j render partial: "pages/modal#{ modal['modal_id'] }",
locals: { modal: modal, index: index_plus_one } %>'
});
}
</script>
<% end %>
<div>this is the first text <%= modal['text1'] %></div>
<div>this is the first image : <%= modal['image1'] %></div>
<div>this is the second text <%= modal['image1'] %></div>
<div>this is the second image <%= modal['image 2'] %></div>
这是第一个文本
这是第一张图片:
这是第二个文本
这是第二张图片
回到我的互联网用户,他加载了第8页,然后单击了按钮,应用程序将通过加载partial _modal37.html.erb加载模态的内容
因此,今天一切都运行良好:)尽管存在一些风险(不是问题的范围,但如果后台管理员(主动管理员)更改模式的结构,那么我们在文件系统中也要更改它,例如,他们添加了“image3”…),但我的主要问题如下:
这是如何在不破坏本地环境/生产环境发展的情况下协调和保持该系统。
事实上,也许你没有注意到,但有一个大问题。我知道,因为我直面了:)
当我完成以上所有工作时,我是在当地发展部门。这意味着我在文件系统中创建了一个部分_modal37.html.erb。但问题是,在生产中,谁知道呢,可能第37个创建的模式不会有相同的结构,可能会是(text1,video1)并且没有图像,因此在生产中,partial_modal37.html.erb必须与我在本地模式中使用的不同
所以,如果我保持现在这样,我需要非常严格,几乎是上帝严格的级别,我认为这表明这个解决方案是不正确的:我每次都需要
- 如果我在本地“活动管理”中创建一个新模式(假设新创建的id=37)
- 在我的文件系统中创建部分_37.html.erb
- 进入生产中的活动管理并创建相同的模式(对于模式模型),如果从一开始我就复制了我在本地和生产中所做的每一次,这也将是37
- 将html模板放在数据库中,而不是放在我的分区中?在这种情况下,如何告诉Rails在数据库中执行代码:“这是第一个文本”。数据库如何“理解”/“意识到”上面“page.html.erb”中的每个模式都在ruby循环中?硬的
- 保持像今天这样的设置,并将html模式内容放在部分:如何解决我非常“物流”的本地/生产协调问题
Modal.first.template
# => {1: [
# [partial1, {user: 12, pet: 'dog'}],
# [partial3, {title: "Hello world}]
# ],
# 2: [
# [partial7, {text: 'This is the intro sentence}]
# ],
# ...
# }
所以现在,只要你的选项和变量匹配,并且部分的名称不变,你就可以去了。维护似乎很高,但我不认为本地/生产服务器会以这种方式不同步
然后,数据库就不需要保存任何HTML,只要它知道部分的名称或到部分的路径。您是否考虑过使用db-safe模板引擎,如?是的,但似乎是针对需要保护internet访问者所做的事/创建模板的情况,否