Я создаю то, что можно описать как CMS (по крайней мере, на некоторых частях он работает как CMS).Rails - Хранить шаблоны html в файловой системе или в базе данных
Я читал, что «конечно, вы никогда не должны ставить HTML кода в базе данных», но чтение this и увидеть некоторые на самом деле это сделать (это gem или here), я сомневаюсь, что лучший способ решить мою проблему.
Ниже поясняются мои текущие проблемы с моим текущим решением. Возможно, лучший способ - поместить его в базу данных, возможно, это сохранить файловую систему, но в другом случае, чем то, что я делаю.
Администраторы бэк-офиса (по адресу Active Admin) Я создаю (т. Е. Разработчики, но также и «маркетологи» => не общедоступные/интернет-посетители) могут перейти в Active Admin и создать «Modals».
Например, я могу создать в Active Admin 'create new Modal' такой модальный вид: name => "Mix of 2 text, 1 image, 1 video" и components => {text1, text2, image1, video 1 }
Это создаст в моем столе «модальность» нового модального
id= 37 (it's an example), name: "Mix of 2 texts, 1 image, 1 video", components = components => { text1, text2, image1, video 1 }
Тогда в активном Admin, администратор может пойти и создать новую «страницу» (есть модель страницы тоже в моей базе данных) : Он может указать, например, название: «пример заголовка» modals: там он выберет в списке выпадающий один из t он модалов. Скажем, теперь он выбирает модальный 37. Active Admin затем спросит его, хорошо, пожалуйста, выберите следующие компоненты для этого модального (что важно: приложение спрашивает его об этом, потому что я хранил в базе данных Modal таблицу, что компоненты для модальных = 37 являются text1, text2, image1 и image2):
- текст 1 - он может написать, например, 'это интро предложение'
- текст 2 - он может написать здесь 'текст'
- изображение 1 - он пишет http://example.com/image1.png
- изображение 2 - он пишет http://example.com/image2.png
Это создаст в активном администратора идентификатор страницы = 8 (пример) и на странице базы данных имеет столбец атрибутов «Модальные», который будет выглядеть как этот
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}
]
Так что, когда интернет-пользователи будут загружать страницы, J = 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 %>
Как видите, теперь пользователь нажал кнопку, и приложение заглянет в столбец «модальный» и проверит первое в массиве id = 37. как разработчик при создании нового шаблона в бэк-офисе (активный администратор), мы должны создать новую частичную _modal37.html.erb в файловой системе с правильным идентификатором:
_modal37.html.Еврорадио
<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>
Возвращаясь к моему интернет-пользователя, который загружен Page 8, а затем нажал на кнопку, приложение будет загружать содержимое модального путем загрузки частичной _modal37.html.erb.
Итак, сегодня все хорошо работает :) и хотя есть некоторые риски (а не область вопроса, но если администраторы бэк-офиса (Active Admin) меняют структуру модальности, то мы имеем в файле системы также изменить его, например, они добавляют «image3» ...), но моя основная проблема заключается в следующем:
Это как координировать и поддерживать эту систему, не нарушая развитие среды LOCAL environment/PRODUCTION ,
Действительно, возможно, вы не заметили, но есть большой вопрос. Я знаю, потому что я столкнулся с этим :)
Когда я все это сделал, я был в ЛОКАЛЬНОМ развитии. Это означает, что я создал в своей файловой системе частичный _modal37.html.erb. Но проблема в том, что в производстве, кто знает, может быть, 37-й созданный модаль не будет иметь одинаковую структуру, может быть, это будет (text1, video1) и никакого изображения, поэтому в процессе частичный _modal37.html.erb должен отличаться от тот, который я использовал в локальном режиме.
Так что, если я держать вещи, как сейчас, мне нужно быть очень строгим, почти бог строгого уровня, и я думаю, что это показывает мне, что это решение не является правильным: Я бы нужен каждый раз
- если я создать в местном «активного администратора» новой модальный (скажем, недавно созданный имеет идентификатор = 37)
- создать в моей файловой системе частичного _37.html.erb
- перейти в активный администратор в производстве и создайте SAME modal (для модели Modal), которая также будет, надеюсь, 37, если с начала времени я воспроизвел каждый раз, что я делаю в местной, а также в производстве ...
Если я следовать за этим каждый раз, местные и производство всегда будет синхронизировать»и имеют тот же идентификатор/компоненты, но это ад :)
же, когда я Удаление или Edit делать какие-либо изменения в локальном активном администраторе структура Modal, я должен сделать это в производстве тоже ... это никогда не заканчивается и не реалистично соответствовать :)
Так что должно Я делаю ?
положить шаблон html в базу данных, вместо того чтобы иметь его внутри моих партикулов? Как, в таком случае, сообщить Rails для выполнения кода внутри базы данных: «это первый текст <% = модальный ['text1']%> '. как бы база данных «понимала»/была «сознательной», что каждый модальный в <% = модальный ['text1']%> находится внутри цикла ruby, который вы видите в 'page.html.erb' выше? Hard ...
сохранить настройку, как сегодня, и поместить html-модальное содержание в частичное: как решить мою очень «логистическую» проблему локального/производственного взаимодействия?
Вы изучали использование шаблона для db-safe, например [Liquid] (https://github.com/Shopify/liquid)? – mysmallidea
да, но, похоже, это было для ситуации, когда вам нужно защитить то, что делают посетители Интернета/создают шаблоны, а не когда я их создаю. – Mathieu
Также я не понял на Liquid, если он хранит html-шаблоны в базе данных или нет. – Mathieu