我找到了这段代码:
sql = <<-SQL.squish
UPDATE #{klass.constantize.table_name}
SET uuid = uuid_generate_v4(), updated_at = now()
WHERE id IN (#{group.map(&:id).join(',')})
AND uuid IS NULL
SQL
这是怎么回事?我假设这是某种特殊的字符串分隔符。叫什么?是特定于 Ruby 的吗?squish
在做什么?
这是 Here 文档 ( HereDoc
的语法,它是 Ruby 中的多行字符串。
例如,这个:
sql = <<-SQL
UPDATE #{klass.constantize.table_name}
SET uuid = uuid_generate_v4(), updated_at = now()
WHERE id IN (#{group.map(&:id).join(',')})
AND uuid IS NULL
SQL
会给你一个sql
字符串变量,其值是字面意思:
UPDATE #{klass.constantize.table_name}
SET uuid = uuid_generate_v4(), updated_at = now()
WHERE id IN (#{group.map(&:id).join(',')})
AND uuid IS NULL
保留所有空格和换行符。
来自 HereDoc 文档:
要在 heredoc 上调用方法,请将其放在开始标识符之后
该引用的流行用法是,当您有一个长字符串并且您不想将其写在一行上时,因此使用 HereDoc,但您仍然不想保留 HereDoc 保留的所有换行符和空格,在这种情况下,您可以调用 squish
(这是 Rails 添加的方法(来删除它们。例如,这个:
sql = <<-SQL.squish
UPDATE #{klass.constantize.table_name}
SET uuid = uuid_generate_v4(), updated_at = now()
WHERE id IN (#{group.map(&:id).join(',')})
AND uuid IS NULL
SQL
将为您提供一个sql
字符串变量,其值按字面意思:
UPDATE #{klass.constantize.table_name} SET uuid = uuid_generate_v4(), updated_at = now() WHERE id IN (#{group.map(&:id).join(',')}) AND uuid IS NULL
所有随后的换行符和空格都挤成一个空格。
String#squish
来自Rails,意味着生成的内联字符串没有多个n
和s
。从文档中:
返回字符串,首先删除 字符串,然后将剩余的连续空格组更改为 各一个空格。