如何为Flash错误添加换行符?

use*_*308 12 ruby ruby-on-rails

我试图格式化Flash错误并遇到一些问题:

errors = ["error1 msg", "error2 msg", "error3 msg"]   
flash[:error] = errors.join("\n") 
Run Code Online (Sandbox Code Playgroud)

我希望看到它们显示在三个单独的行中,但是,我"error1 msg error2 msg error3 msg"改为了.

我用来加入字符串的换行符发生了什么变化?

Bla*_*son 17

HTML不使用换行符换行符,它使用<br/>标记.此外,您必须使用html_safe以确保模板不会转义<br/>标记

errors = ["error1 msg", "error2 msg", "error3 msg"]
flash[:error] = errors.join("<br/>").html_safe 
Run Code Online (Sandbox Code Playgroud)

此外,如果您有一个有错误的对象,您可以使用它full_messages来获得格式错误的错误.像这样的东西:

flash[:error] = @user.errors.full_messages.join("<br/>").html_safe
Run Code Online (Sandbox Code Playgroud)

  • 将其他答案用作您自己的答案是个坏主意。 (2认同)

Mat*_*chu 6

浏览器通常会忽略HTML中的换行符.也许使用换行<br/>标记加入错误会产生预期的效果.

flash[:error] = errors.join("<br/>") 
Run Code Online (Sandbox Code Playgroud)

虽然在语义上将错误置于无序列表(<ul>)中并将每个错误放在其自己的列表项(<li>)中可能更有意义.你的来电.

  • `errors.join("<br/>").html_safe`应该有效. (7认同)
  • 它不起作用.现在显示"error1 msg <br/> error2 msg <br/> error3 msg" (4认同)
  • 它确实有效,但是Rails可能正在消化"试图帮助". (2认同)