【问题标题】:How to make a text bold in helper.rb ruby file inside a string如何在字符串中的 helper.rb ruby​​ 文件中使文本加粗
【发布时间】:2023-02-09 02:12:18
【问题描述】:

我有一个名为 schedule_mailer.html.erb 的邮件文件 因为我正在尝试使用一种辅助方法来渲染内容

在 scheudle_mailer.html.erb

<p style='font-size:15px;margin:0 25px 20px 25px' >
  <%= body_text_tag() %>
</p>

在 helper.rb 我需要发送一个包含&lt;b&gt;&lt;br&gt; 的字符串 但我在邮件中收到了 &lt;b&gt;&lt;br&gt; 标签本身。

我的辅助方法

def body_text_tag()
      body = "This email to inform you that"
        if @creation 
          body +  "your hotel schedule has been created <br>
          <b>timings :</b>  #{@timings}, <br>
          <b>Room number :</b> #{@room number},<br>
          ....
          ....
          ....
        elsif ....
       .....
end.

正如我在字符串中尝试使用 tag(:br) 一样,即使它使用 tag(:br) 本身而不是换行来呈现邮件。 如何将字符串中的这种标签处理为 HTML?

【问题讨论】:

  • 为什么不在这种情况下直接使用 ERB 或在每种情况下使用部分?为什么要从 ERB 调用助手并使用字符串连接构建 HTML?
  • @spickermann 因为相同的内容已在具有相同实例变量的多个电子邮件模板中使用,所以这就是我尝试使用 helper 实现的原因

标签: html ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4


【解决方案1】:

这不起作用的原因是,在 Rails 中,当您将普通字符串附加到 a safe buffer 时,它会自动转义以防止 XSS 攻击。

irb(main):076:0> "<b>Hello".html_safe + "World</b>"
=> "<b>HelloWorld&lt;/b&gt;"

如果你想创建包含来自助手的 HTML 标签的文本,你需要将 HTML 标签部分标记为安全:

"<b>".html_safe + @timings + "</b>".html_safe

不要做:

"<b>#{ @timings }</b>".html_safe 

除非您真的知道内容实际上是安全的并且不包含用户输入。

这是 the tag helpers 自动为你做的:

content_tag(:b, @timings)
tag.b(@timings) 

但是这段代码很可能一开始就不属于助手。使用视图或部分并将其写入 ERB。

【讨论】:

    【解决方案2】:

    我尝试并为我工作的解决方案之一是在邮件程序中使用 html_safe。 作为 <%= body_text_tag().html_safe %>

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-07
    • 2021-10-09
    • 1970-01-01
    • 2021-05-15
    • 2018-12-13
    • 2013-03-26
    • 1970-01-01
    相关资源
    最近更新 更多