У меня есть частичное следующее:
# common/_widget.html.erb
<div class="widget">
<%= process_content_tags(variable_with_html) %>
</div>
Внутри variable_with_html (содержимое поступает из базы данных) У меня может быть:
<h1>Hello, [first_name] !</h1>
<strong>Welcome to our website!</strong>
<p>Here are some options to get you started:</p>
[menu]
Thank you for using our services!<br />
У меня много тегов, например [first_name], который я использую для добавления данных в HTML, функция process_content_tags делает это через поиск и замену, но у меня нет способа визуализировать частичное, например:
content.gsub("[menu]", render(:partial => "common/navbars/menu") )
"_menu.html.erb"«частичное может иметь несколько ссылок, сгенерированных из базы данных на основе сеанса, запроса и нескольких других переменных, не может просто передать @user и сессию ему как локальные объекты и выполнить рендеринг с помощью ApplicationController.render (..., которыйЯ попытался и быстро сдался.
Этот метод .render_to_string также не работает.
И, конечно, я не могу оценить содержимое этой переменной.
Я проверил другие ответы, похоже, что они используют только 1-2 переменных или их вообще нет, поэтому render_to_string вроде работает для них.
Я рассмотрел использование Liquid и нескольких других языков шаблонов., сЯ не могу понять, как получить некоторый динамический контент так, как я хочу.Также не хочу, чтобы люди программировали меню на каком-то случайном языке шаблонов, когда все, что им нужно, это добавить пользовательское меню в виджет с помощью действия перетаскивания.
Прямо сейчас я делаю этот трюк (можетне называйте это хаком), который пахнет:
В помощнике ...
@required_menus = []
["account", "affiliates", "agents", "bottom", "footer", "header", "navbar", "secondary", "top", "users"].each do |menu|
doc_content.scan(/\[menu\[([^\]]*)\]\]/).flatten.each do |str|
@required_menus << str
doc_content = doc_content.gsub("[menu["+str+"]]", "")
end
end
И в частичном виджете:
<%= process_content_tags(widget.content).html_safe %>
<% @required_menus.uniq.each do |menu| %>
<%= render :partial => "common/navbars/navbar", :locals => { :area => menu } %>
<% end %>
Как я могу получитьэто сделано цивилизованно, достойно этого тысячелетия?