0

我有一个 Portfolio 模型,其中包含一个文本类型的注释字段,其值是一组由 cr 和 nl 字符组合分隔的段落。目标是将段落提取到一个数组中,将它们包装在 <p> 标签中,然后重新加入它们以输出到浏览器;所以下面代码的重点是第 6-8 行。

我遇到的问题是 < 和 > 字符被呈现为 HTML 实体 < 和>。

我是 Ruby 和 Rails 的新手,所以我的猜测是这不能按预期工作的原因是因为我可能采用了不正确的方法——我想知道一个有经验的 Ruby 编码器将如何解决这个问题种情况。在将内容发送到视图之前,如何将 HTML 标记插入到内容中?或者这总是违反 MVC 模型——在这种情况下,解决这类问题的正确方法是什么?

这是代码:

1.   module ApplicationHelper
2.   
3.     def portfolio_featured
4.       @portfolios = Portfolio.all
5.       @portfolios.each do |p|
6.         paras = p.comments.split(/\r?\n\r?\n/)
7.         paras.collect! { |p| "<p>" + p + "</p>" }
8.         p.comments = paras.join
9.       end
10.    end
11.
12.  end
4

2 回答 2

1

看看simple_format TextHelper。

这可能是您正在寻找的。

于 2012-06-12T22:18:41.243 回答
0

您可以使用TextHelper#simple_formatBluecloth (Markdown) 之类的花哨的东西,但如果您想自己做饭,那就是您可以编写的(关键是使用safe_join):

def portfolio_featured
   safe_join(Portfolio.all.map do |portfolio|
     portfolio.comments.lines.map { |line| content_tag(:p, line.chomp) }
   end)
end
于 2012-06-12T22:20:02.540 回答