Ruby on rails 以<;开头的ruby块<-HTML

Ruby on rails 以<;开头的ruby块<-HTML,ruby-on-rails,ruby,devise,Ruby On Rails,Ruby,Devise,我正在学习如何将Desive flash和错误消息与Bootstrap集成(或者在我的例子中是Materialize)。我在Devise的wiki()中找到了一篇关于这个主题的文章,因此我理解它是如何工作的,但是有一部分代码我在理解上有问题 html = <<-HTML <div class="card-panel red lighten-2"> #{messages} </div> HTML html.html_safe html=这是一种声明字符

我正在学习如何将Desive flash和错误消息与Bootstrap集成(或者在我的例子中是Materialize)。我在Devise的wiki()中找到了一篇关于这个主题的文章,因此我理解它是如何工作的,但是有一部分代码我在理解上有问题

html = <<-HTML
<div class="card-panel red lighten-2"> 
  #{messages}
</div>
HTML

html.html_safe
html=这是一种声明字符串的常用方法,在某些情况下非常有用(编辑:感谢@Stefan):

想象一下,在没有任何换行的情况下阅读一个非常复杂的SQL查询是多么痛苦!(与手动联接、递归、并集或表视图类似)


它适用于任何类型的单词:

a_string = <<-WHATEVER
  This is a string
  with some line-break
  to make it more readable
  #{and_you_can_use_string_interpolation_too}
WHATEVER

a_string=它被称为
here doc
:这很好@PrakashMurthy。谢谢。顺便说一句,你可以在herdeoc上调用一个方法:
不仅仅是一种Ruby方式,存在于各种语言中。谢谢你的澄清@StefanI知道Ruby在换行时非常聪明,但是你说既然它是一个字符串,它就需要解释因此,在您的示例中,服务器不会将
sql=“SELECT*FROM\n WHERE\n…
”接受到`ActiveRecord::Base.connection.execute(sql)`中?是的,因为断线符
“\n”
不会在sql查询中使用。(在您的IRB控制台中复制粘贴该示例,它会起作用)我理解你的意思,我只是想知道它是否只是为了人类可读性,或者如果将换行符放入单行sql变量中,该参数是否有效。我明白你的意思。我可以自己尝试。谢谢。
sql = <<-SQL
  SELECT * FROM users
  WHERE users.id > 15
  ORDER BY users.username;
SQL
ActiveRecord::Base.connection.execute(sql)
sql = "SELECT * FROM users WHERE users.id > 15 ORDER BY users.username;"
ActiveRecord::Base.connection.execute(sql)
a_string = <<-WHATEVER
  This is a string
  with some line-break
  to make it more readable
  #{and_you_can_use_string_interpolation_too}
WHATEVER