Ruby on Rails在两个#{string}之间添加了新行

tet*_*rto 0 string ruby-on-rails add line between

我有一个名为模型的文本属性:settore_scientifico_progetto和三个字符串属性:macrocat:cat:microcat

class Modulo1 < ActiveRecord::Base
  before_create :set_settore_scientifico_progetto
  before_update :update_settore_scientifico_progetto

  private      
  def set_settore_scientifico_progetto
    self.settore_scientifico_progetto = "#{macrocat}\n#{cat}\n#{microcat}" 
  end

  def update_settore_scientifico_progetto
    self.settore_scientifico_progetto = "#{macrocat}\n#{cat}\n#{microcat}"
  end
Run Code Online (Sandbox Code Playgroud)

我想在输入的内容前加一行,\n但是我发布的代码给了我输出 macrocat cat microcat

我希望如下:

macrocat

的Microcat

输出显示在show.html.erb

<div class="form-field">  
  <h3>Settore scientifico:</h3>
  <p><%= @modulo1.settore_scientifico_progetto %></p>
</div>
Run Code Online (Sandbox Code Playgroud)

Jor*_*ing 5

Rails有一个专门用于此目的的助手simple_format

<%= simple_format @modulo1.settore_scientifico_progetto %>
Run Code Online (Sandbox Code Playgroud)

这将输出以下HTML:

<p>macrocat<br/>
  cat<br/>
  microcat
</p>
Run Code Online (Sandbox Code Playgroud)

这是由您的浏览器呈现的,如下所示:

macrocat

的Microcat

这似乎正是您要寻找的内容,它会为您清理HTML。(在docs列出了用于定制输出的选项,例如,更改包装标签或HTML属性。)

PS使用gsub...html_safe上面提倡的方法非常危险。如果您的应用接受您要打印的任何属性的用户输入,则调用html_safe这些值意味着它们将不会被ActionView清除,并且恶意用户可能会将代码注入视图中,从而使您的应用容易受到跨站点脚本的攻击( XSS)攻击。这是有关html_safeRails 来龙去脉的一个很好的入门