如何在Rails控制器中为Flash Notice添加换行?
在Rails 4控制器中给Flash Notice添加换行符的正确方法
嘿,我来帮你搞定这个Flash消息换行的问题~你的原写法有两个小问题:一是字符串插值的语法错误,二是Rails默认会转义HTML标签,所以即使写对了<br />也会被当成文本显示。针对Ruby 2.2.1和Rails 4.0.10,有两种靠谱的解决方案:
方法一:使用html_safe标记安全HTML
直接在消息字符串末尾调用html_safe方法,告诉Rails这个字符串里的HTML标签不需要转义,这样<br />就能正常渲染成换行:
flash[:success] = "We will notify you when we go LIVE! <br /> Meantime, complete this quick survey so we can get to know your interest.".html_safe
方法二:用换行符配合视图的simple_format
如果你不想在控制器里直接写HTML标签,可以用普通的换行符\n,然后在视图渲染Flash消息的地方用simple_format方法,它会自动把换行转换成<br />:
控制器代码:
flash[:success] = "We will notify you when we go LIVE! \n Meantime, complete this quick survey so we can get to know your interest."
视图中渲染Flash的代码:
<% if flash[:success] %> <div class="flash success"> <%= simple_format(flash[:success]) %> </div> <% end %>
为什么原写法不对?
你原来的#{<br />}是错误的字符串插值写法——#{}里应该放Ruby表达式,而<br />是HTML标签,直接写在字符串里就行,不需要插值。另外,Rails为了安全,默认会把所有字符串转义,所以即使你正确写了<br />,它也会显示成纯文本,必须用html_safe或者simple_format来处理。
内容的提问来源于stack exchange,提问作者SupremeA
相关产品推荐
相关产品推荐

