我有一个Rails应用程序,可以在我的模型中输入几段文本。问题是,我不知道如何输入任何换行符。
我尝试添加“{ln} {/ ln}; { }和 {br} {/ br}”,但它只显示html代码,而没有换行符。
有没有办法设置文本区域控件将使用我放置在模型条目中的html?
有没有什么东西我可以输入,让Rails识别,嘿,在这里加一行?
我有一个Rails应用程序,可以在我的模型中输入几段文本。问题是,我不知道如何输入任何换行符。
我尝试添加“{ln} {/ ln}; { }和 {br} {/ br}”,但它只显示html代码,而没有换行符。
有没有办法设置文本区域控件将使用我放置在模型条目中的html?
有没有什么东西我可以输入,让Rails识别,嘿,在这里加一行?
\n
符号,但是会假设两个\n
符号表示一个新段落,并且将输入的内容包裹在<p>
标签内。使用哪种方法取决于你的具体需求。如果你必须完全保留所有换行符,则应该使用被接受的答案。否则,使用simple_format,并计划在输出此值时添加段落标记。 - Aaron问题不在于编辑值,而在于稍后呈现它。要在文本区域中编辑值并添加换行符,请按回车键。以后重新编辑该值时,空格应仍然存在。
呈现空格是棘手的部分。在HTML中,空格通常不重要。像浏览器使用的渲染器将为任何连续的空格字符串显示一个空格。因此,仅仅将值转储到页面上是不够的:
<%= obj.description %>
"One \t \n \n Two"
,它在屏幕上显示为"One Two"
。<%= obj.description.gsub(/\n/, '<br/>') %>
<%= h(obj.description).gsub(/\n/, '<br/>') %>
保持用户输入不变,并将以下内容添加到您的CSS中:
white-space: pre-line;
当用户输入\r或\n(回车符或换行符)时,它将作为新行显示。
这是另一种在保留其余文本的转义的同时显示字符串中换行的方法:
<%= safe_join(@object.textarea_input.split("\r\n"), "<br />".html_safe) %>
tag
助手,像这样:safe_join(@object.textarea_input.split("\r\n"), tag(:br))
- amoebesimple_format
的问题在于它还会添加其他标签,比如 <b><i><hr><h1>
等等...
如果你只想要换行而不带其他标签,我建议你构建一个局部文件(我们称之为 line_break):
<% text.split("\n").each do |t| %>
<%= t %><br>
<% end %>
然后,只需从您的视图中调用它:
<%= render partial: 'line_break', locals: {text: some_text} %>
"foo<br />bar"
在Rails 3中,如果要评估HTML,可以这样做:<%=raw "foo<br />bar" %>
,如果这样做,您将在视图中看到一个换行符。<%= "foo<br />bar" %>
而且,在文本区域中HTML代码也无法被评估。<%=raw text_area_tag :keywords, keywords, :rows => 8 %>
例如:<textarea><%= "LINE 1 LINE 2 LINE 3".html_safe %></textarea>
上面的回答都很好:
gsub
(@Ian)效果很好simple_format
(@Karl)有点过头了,正如@Aaron指出的那样,将所有内容都包裹在<p>
中所以我进行了以下调整:
simple_format(value, {}, wrapper_tag: 'div')
\n
如果我的记忆没错的话(今天它表现不太好...尝试需谨慎哈哈)
编辑:假设你在谈论一个 textarea
,如果只是简单输出,那么就使用 <br>
<%= f.text_area :description %>
)?还是在页面上,当您明确呈现值时(即<%= obj.description %>
)? - Ian Lesperance