这些字符串叫什么?什么是挤压?红宝石



我找到了这段代码:

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,意味着生成的内联字符串没有多个ns。从文档中:

返回字符串,首先删除 字符串,然后将剩余的连续空格组更改为 各一个空格。

最新更新