我在rails控制台上运行脚本以生成配置文件品牌的slug。这是我的剧本:
class String
def to_slug
#strip the string
ret = self.strip.downcase
#blow away apostrophes
ret.gsub! /['`]/,""
# @ --> at, and & --> and
ret.gsub! /\s*@\s*/, " at "
ret.gsub! /\s*&\s*/, " and "
#replace all non alphanumeric, underscore or periods with hyphen
ret.gsub! /\s*[^A-Za-z0-9\.\-]\s*/, '-'
#convert double underscores to single
ret.gsub! /_+/,"_"
#strip off leading/trailing underscore
ret.gsub! /\A[_\.]+|[_\.]+\z/,""
ret
end
end
Profile.all.each do |profile|
if !profile.brand_name.nil? && profile.brand_name != profile.first_name
profile.slug = profile.brand_name.to_slug
profile.save
end
end
它非常适用于不包含下划线的字符串。但它不会为包含下划线的字符串生成slug。
e.g。在品牌名称是“Kalpana's_Creations”,这个品牌的slu is是“nil”,应该是“kalpanas_creations”
这是我在rails控制台运行脚本时看到的内容:
Profile Load (3.2ms) SELECT `profiles`.* FROM `profiles`
(0.2ms) BEGIN
Profile Exists (0.8ms) SELECT 1 AS one FROM `profiles` WHERE (`profiles`.`brand_name` = BINARY 'Kalpana\'s_Creations' AND `profiles`.`id` != 6) LIMIT 1
(0.2ms) ROLLBACK
我不知道这里出了什么问题。任何人都可以帮忙吗?
答案 0 :(得分:0)
您收到Profile Exists
错误,然后ActiveRecord执行ROLLBACK
。你没有发布你的模型,但我想有一些独特的验证会触发回滚,因为已经有一个带有这些值的条目。