在我的Rails 3应用程序中,我使用textarea
让用户在论坛中写一条新消息。
但是,当显示消息时,所有换行符都看起来像空格(没有<br />
)。也许还有其他不匹配的例子,我还不知道。
我想知道最合适的方法是什么。
我想存储在数据库中的文本没问题(例如我看到<
转换为<
),所以主要问题是演示文稿。
Rails中是否有内置的辅助方法?
(simple_format做了类似于我需要的内容,但它添加了<p>
个我不想出现的标签。)
答案 0 :(得分:73)
Rails有一个开箱即用的帮助方法,所以你不必编写自己的方法。
来自文档:
simple_format(text, html_options={}, options={})
my_text = "Here is some basic text...\n...with a line break."
simple_format(my_text)
# => "<p>Here is some basic text...\n<br />...with a line break.</p>"
more_text = "We want to put a paragraph...\n\n...right there."
simple_format(more_text)
# => "<p>We want to put a paragraph...</p>\n\n<p>...right there.</p>"
simple_format("Look ma! A class!", :class => 'description')
# => "<p class='description'>Look ma! A class!</p>"
答案 1 :(得分:34)
您可以在文本周围的html标记中使用style="white-space: pre-wrap;"
。这尊重文本中的任何换行符。
答案 2 :(得分:28)
由于simple_format
没有达到你想要的效果,我会制作一个简单的辅助方法,将换行符转换为<br>
s:
def nl2br(s)
s.gsub(/\n/, '<br>')
end
然后在您的视图中,您可以像这样使用它:
<%= nl2br(h(@forum_post.message)) %>
答案 3 :(得分:8)
如果有人仍然在这里重定向并使用Rails 4: http://apidock.com/rails/v4.0.2/ActionView/Helpers/TextHelper/simple_format
您现在可以指定它包含的标记(默认为p),如下所示:
simple_format(my_text, {}, wrapper_tag: "div")
# => "<div>Here is some basic text...\n<br />...with a line break.</div>"
答案 4 :(得分:8)
我认为最简单的选择之一是使用css select (string_to_array(a::text, ','))[3] as pid
from pg_stat_activity a;
其他答案也提到了使用空格,但我认为它需要更多信息:
在大多数情况下,您应该选择white-space: pre-line;
而不是pre-line
。查看差异here。
请注意pre-wrap
你不应该做这样的事情,这一点非常重要:
white-space
它会在输出中产生额外的空格和换行符。相反,请遵循:
<p style="white-space: pre-line;">
<%= your.text %>
</p>
另一种方法是将文本包装在<p style="white-space: pre-line;"><%= your.text %></p>
标签中。关于我的CSS选项的最后一点注意事项也是如此:
<pre>
请勿使用空格或换行符将文本与<p>
<pre><%= your.text %></pre>
</p>
标记分开。
在谷歌搜索这个问题之后,我感觉html-approach被认为不如css那么干净,我们应该去css-way。然而,html-way似乎更兼容浏览器(支持古老的浏览器,但谁在乎):
答案 5 :(得分:3)
以下助手将新行保留为换行符,并将任何HTML或脚本(例如Javscript)呈现为纯文本。
def with_new_lines(string)
(h(string).gsub(/\n/, '<br/>')).html_safe
end
在视图中使用
<%= with_new_lines @object.some_text %>
答案 6 :(得分:3)
我刚使用white-space: pre-line
。所以下一行(\ n)将渲染它。
答案 7 :(得分:2)
您需要将textarea的纯文本转换为HTML。
在最基本的级别,您可以运行字符串替换:
message_content.gsub! /\n/, '<br />'
您还可以使用特殊格式,如Markdown(Ruby库:BlueCloth)或Textile(Ruby库:RedCloth)。
答案 8 :(得分:0)
我在我的rails应用程序中使用了Ace代码编辑器,我遇到了问题,无论何时我更新或创建代码,它都会在每一行上添加额外的TAB(除了第一个)。我用gsub或javascript替换它无法解决它..但是当我禁用该模板的布局时,它意外地解决了自己。
所以,我用
解决了这个问题render :layout => false