ruby 以 <<-HTML 开头的块

ruby block that starts with <<-HTML

我正在学习如何将 Devise flash 和错误消息与 Bootstrap(或在我的情况下为 Materialize)集成。我在 Devise 的 wiki (https://github.com/plataformatec/devise/wiki/How-To:-Integrate-I18n-Flash-Messages-with-Devise-and-Bootstrap) 中找到了一篇关于该主题的文章,因此我了解它是如何工作的,但有一部分代码我无法理解。

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

html.html_safe

谁能解释一下 <<-HTML 语法?顺便说一句,如果您需要上下文

,这是完整的功能
def devise_error_messages!
return '' if resource.errors.empty?

messages = resource.errors.full_messages.map { |msg| content_tag(:li, msg) }.join
html = <<-HTML
<div class="card-panel red lighten-2"> 
  #{messages}
</div>
HTML

html.html_safe
end

这是声明字符串的 ruby 常用方法,在某些情况下非常有用(编辑:http://en.wikipedia.org/wiki/Here_document 感谢@Stefan) :

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)

想象一下在没有任何换行符的情况下阅读非常复杂的 SQL 查询的痛苦! (例如手动连接、递归、联合或 table(s)!

的视图

它适用于任何类型的词:

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