Rails:包含下划线的slug未生成

时间:2013-06-17 13:54:50

标签: ruby-on-rails-3.2 slug

我在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

我不知道这里出了什么问题。任何人都可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

您收到Profile Exists错误,然后ActiveRecord执行ROLLBACK。你没有发布你的模型,但我想有一些独特的验证会触发回滚,因为已经有一个带有这些值的条目。