Jwa*_*622 7 ruby ruby-on-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
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?我认为这是某种特殊的字符串定界符。这叫什么?它是特定于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
Run Code Online (Sandbox Code Playgroud)
将为您提供一个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
Run Code Online (Sandbox Code Playgroud)
保留所有空格和换行符。
从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
Run Code Online (Sandbox Code Playgroud)
将为您提供一个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
Run Code Online (Sandbox Code Playgroud)
随之而来的所有换行符和空格都被压缩为一个空格。
| 归档时间: |
|
| 查看次数: |
1590 次 |
| 最近记录: |