如何将~24000个产品标题转换为URL密钥?

时间:2014-09-22 10:10:37

标签: ruby regex string shopify gsub

我有一个包含~24000个产品的阵列。哈希将保存为CSV并使用产品导入方法上传到Shopify商店。

当我手动创建单个产品时,将根据产品标题自动生成产品网址密钥/句柄。使用产品导入方法(CSV)时,我必须自己指定。

如何将标题转换为产品网址密钥?

示例:

title_1 = "AH Verse frietaardappelen"
url_key_1 = "ah-verse-frietaardappelen"

title_2 = "Lay's Sensations red sweet paprika"
url_key_2 = "lay-s-sensations-red-sweet-paprika"

我目前正在使用:

<title>.downcase.gsub(' ','-').gsub("'", '-')

但是这并没有从标题中删除%$&/等。我想确保url键/产品手柄尽可能干净。

必须有更好的方法来做到这一点,我接下来可以尝试什么?

4 个答案:

答案 0 :(得分:1)

Shopify的Liquid gem中有(私人)to_handle方法:

def to_handle(str)
  result = str.dup
  result.downcase!
  result.delete!("'\"()[]")
  result.gsub!(/\W+/, '-')
  result.gsub!(/-+\z/, '') if result[-1] == '-'
  result.gsub!(/\A-+/, '') if result[0] == '-'
  result
end

示例:

to_handle("AH Verse frietaardappelen")
#=> "ah-verse-frietaardappelen"

to_handle("Lay's Sensations red sweet paprika")
#=> "lays-sensations-red-sweet-paprika"

答案 1 :(得分:0)

查看gem String Urlize,它可以帮助您编写脚本来执行此操作。

答案 2 :(得分:0)

我建议您使用Rails ActiveSupport :: Inflector#参数化解决方案 - http://apidock.com/rails/ActiveSupport/Inflector/parameterize

它处理了很多边缘情况,应该适合你。

答案 3 :(得分:0)

最好的方法是使用参数化方法:

title_1 = "AH Verse $frietaardappelen".parameterize
         Output: "ah-verse-frietaardappelen"

title_2 = "Lay's Sensations red %sweet paprika".parameterize

    output: "lay-s-sensations-red-sweet-paprika"