2013-06-17 3 views
0

Je lance un script sur rails pour générer des slug pour les marques de profil. Ceci est mon script:Rails: slug contenant des underscores ne pas être générés

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 

Il fonctionne parfaitement pour les chaînes qui ne contiennent pas de soulignement. Mais il ne génère pas de slug pour les chaînes contenant un underscore.

par exemple. au nom de la marque est « Kalpana's_Creations », limaces de ce nom de marque est « nul », qui devrait être « kalpanas_creations »

Voici ce que je vois lorsque la console de rails exécute le script:

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 

I Je ne comprends pas ce qui ne va pas ici. Quelqu'un peut-il aider?

Répondre

0

Vous obtenez une erreur Profile Exists et ensuite ActiveRecord fait un ROLLBACK. Vous n'avez pas publié votre modèle mais je suppose qu'il existe une sorte de validation unique qui déclenche la restauration car il existe déjà une entrée avec ces valeurs.

+0

Vous avez raison. Il y avait un problème de validation. Résolu maintenant. Merci. – user2206724

Questions connexes