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", "<br\>").html_safe
你应该使用 Rails 的内置 simple_format
助手而不是 gsub...html_safe
方法。 <%= simple_format @modulo1.settore_scientifico_progetto %>
。 (这将自动将内容包装在 <p>
标记中;链接的文档显示了如何自定义它。)
只是一个小问题,为什么你有两种方法可以做同样的事情?
【参考方案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 Scaffolding:同一张表的两个外键