Рендеринг частичных строк в Rails 5 - PullRequest
0 голосов
/ 08 мая 2019

У меня есть частичное следующее:

# 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 %>

Как я могу получитьэто сделано цивилизованно, достойно этого тысячелетия?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...