Rails 正在使用 .html_safe 转义视图中的 erb 行

Rails is escaping erb lines in a view using .html_safe

这是我在 Stack Overflow 上的第一个 post,我想这不是我开发之旅的最后一个。

在我的 Rails 应用程序中,我在将作为文本插入的 html 内容转换为实际 html 时遇到问题。它适用于 html 除了使用 erb 的一行。

观看节目

show.html.erb

...
<%= render 'profitability_row_element', simulation: @simulation, type: "gross" %>
...

对应于一个模拟的展示,我们将那个模拟作为局部传递给我们的部分

部分

_profitability_row_element.html.erb

      <p class="text-xs">
        <%= tooltip_formula(["Prix d'achat", "+", "Frais de notaire"]).html_safe %>
      </p>

为了给你一些上下文,我们的想法是在下面显示一些指标及其相应的公式,然后当用户将鼠标悬停在公式的元素(例如“Prix d'achat”)上时,它会显示值用于计算

帮手

simulations_helper.rb

module SimulationsHelper

  def tooltip_formula(formula_elements_array)
    formula_elements_array.map!.with_index do |formula_element, i|
      i.even? ? tooltip(formula_element) : formula_element
    end.join(' ')
  end

  def tooltip(formula_element)
    tooltip = 'class1'
    tooltiptext = 'class2'

    "<span class='#{tooltip}'>
      #{formula_element}
      <span class='#{tooltiptext}'>
        <%= simulation.#{convert_formula_element_to_corresponding_simulation_variable(formula_element)} %>
      </span>
    </span>"
  end

end

它适用于 html 内容(内容 #{formula_element} 正确显示并且 类 #{tooltip} 和 #{tooltiptext} 正确应用),但是它似乎确实逃脱了 erb 标签,我肯定在这里做错了什么,但我无法弄清楚。

Result in Chrome

我希望<%= simulation.house_rent_amount_per_year %>显示它的值

是否有任何线索可以将此 erb 转换为 html?

提前谢谢你,

Mth0158

it does seem to escape erb tags

发生这种情况是因为您在助手中呈现 HTML。将整个 "<span ... 代码移动到 erb 部分。它应该是这样的:

<p class="text-xs">
  <% ["Prix d'achat", "+", "Frais de notaire"].map.with_index do |formula_element, i| %>
    <% if i.even? %>
      <span...
    <% else %>
      <%= formula_element %>
    <% end %>
  <% end %>
</p>