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

Posted

技术标签:

【中文标题】Ruby on Rails 在两个 #string 之间添加新行【英文标题】:Ruby on Rails add new line between two #stringRuby on Rails 在两个 #string 之间添加新行 【发布时间】:2014-07-08 13:58:29 【问题描述】:

我有一个名为: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

我想在我输入 \n 的地方添加一个新行,但我发布的代码给了我输出 macrocat cat microcat.

我想要如下:

宏猫 猫 微猫

输出显示在show.html.erb:

<div class="form-field">  
  <h3>Settore scientifico:</h3>
  <p><%= @modulo1.settore_scientifico_progetto %></p>
</div>

【问题讨论】:

你在哪里以及如何输出值? @HarshGupta 在输出中使用 它打印我的宏猫catmicrocat 我认为@modulo1.settore_scientifico_progetto.gsub("\n", "&lt;br\&gt;").html_safe 你应该使用 Rails 的内置 simple_format 助手而不是 gsub...html_safe 方法。 &lt;%= simple_format @modulo1.settore_scientifico_progetto %&gt;。 (这将自动将内容包装在 &lt;p&gt; 标记中;链接的文档显示了如何自定义它。) 只是一个小问题,为什么你有两种方法可以做同样的事情? 【参考方案1】:

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

<%= simple_format @modulo1.settore_scientifico_progetto %>

这将输出以下 HTML:

<p>macrocat<br/>
  cat<br/>
  microcat
</p>

你的浏览器会这样渲染:

宏猫 猫 小猫

这似乎正是您正在寻找的,它会为您清理 HTML。 (用于自定义输出的选项,例如更改包装标签或 HTML 属性,为 listed in the docs。)

附:使用上面提倡的gsub...html_safe 方法是非常危险的。如果您的应用接受用户对您正在打印的任何属性的输入,则对这些值调用 html_safe 意味着它们不会被 ActionView 清理,并且恶意用户可能会向视图中注入代码,从而使您的应用容易受到交叉攻击站点脚本 (XSS) 攻击。 Here's a good primer 在 Rails 中 html_safe 的来龙去脉。

【讨论】:

我会在几分钟内尝试这种方法@Jordan!

以上是关于Ruby on Rails 在两个 #string 之间添加新行的主要内容,如果未能解决你的问题,请参考以下文章

在 ruby​​ on rails 3 中通过电子邮件创建订阅

Ruby on Rails 从一种形式保存在两个表中

Ruby on Rails 中一个共享视图的两个控制器

Ruby on Rails Scaffolding:同一张表的两个外键

Ruby on Rails- :symbols、@iVars 和“字符串”——哦,天哪!

在 Ruby on Rails 中为帖子添加标签