2010-12-14 56 views
2

Je suis en train de prendre ce lien ..Comment échanger ce lien avec Rails?

http://www.youtube.com/watch?v=4lzi_3SM9-o 

et la transformer en ceci:

http://www.youtube.com/v/4lzi_3SM9-o 

Pour ce faire, je besoin d'un moyen de capturer watch?v= et passer avec v/

Et je voudrais accomplir ceci dans mon modèle avec def tube_link

Des idées?

Répondre

3

Pas besoin de regex, il suffit d'utiliser le remplacement de chaîne:

url["watch?v="] = "v/" 

Mais averti que vous pourriez obtenir une erreur d'index si vous indexez sur quelque chose qui est pas dans la chaîne. (Voir here pour plus d'informations.)

Edit: Quelque chose comme cela pourrait être plus lisible ( et plus fiable):

newUrl = oldUrl.gsub("watch?v=", "v/") 
+0

Wow moyen intéressant. Merci Plat! – Trip

+0

Le seul problème avec votre première solution est que si 'url' ne contient pas' watch? V = ', vous obtiendrez probablement une erreur. ('IndexError: chaîne non trouvée' pour moi ici, mais pourrait dépendre de votre installation). Cela fait de gsub une meilleure option car elle ne fera rien si le motif n'est pas trouvé. –

+0

@Brett Bender: Ooh, très bon point. Je vais modifier la réponse pour refléter cela. –

4
"http://www.youtube.com/watch?v=4lzi_3SM9-o".gsub("watch?v=", "v/") 
2

Vous devez remplacer les guillemets doubles avec guillemets simples . Il économisera votre temps

t1 = Time.now 
for i in 1..100000 
    "http://www.youtube.com/watch?v=4lzi_3SM9-o".gsub("watch\?v=", "v/") 
end 
t2 = Time.now 
p t2-t1 

>ruby test.rb 
1.173 

t1 = Time.now 
for i in 1..100000 
"http://www.youtube.com/watch?v=4lzi_3SM9-o".gsub('watch\?v=', 'v/') 
end 
t2 = Time.now 
p t2-t1 

>ruby test.rb 
0.406 

1.173 Vs. 0,406

+0

Whoa! Fou! Pourquoi donc? – Trip

+0

Lorsque vous écrivez une chaîne entre guillemets, ruby ​​fait une interpolation de chaîne qui ralentit le processus. – crazycrv