2010-12-14 6 views
2

Ich versuche, diesen Link zu nehmen ..Wie tausche ich diese Verbindung mit Rails aus?

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

Und in diese abbiegen:

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

Um dies zu tun, muss ich einen Weg watch?v= erfassen und schalten Sie es mit v/

Und ich möchte dies in meinem Modell mit def tube_link

erreichen. Irgendwelche Ideen?

Antwort

3

Keine Notwendigkeit für regex, benutzen Sie einfach string Ersatz:

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

Aber gewarnt werden, dass Sie einen Index Fehler auf etwas, wenn Sie Index bekommen könnte, die nicht in der Zeichenfolge ist. (Siehe here für weitere Informationen.)

Edit: So etwas könnte besser lesbar sein ( und zuverlässiger):

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

Wow Weise interessant. Danke Plat! – Trip

+0

Das einzige Problem mit Ihrer ersten Lösung ist, wenn "URL" nicht enthält "Uhr? V =" überhaupt werden Sie wahrscheinlich einen Fehler erhalten. ('IndexError: String nicht übereinstimmend' für mich hier, könnte aber von Ihrer Einrichtung abhängen). Dies macht gsub zu einer besseren Option, da es nichts tut, wenn das Muster nicht gefunden wird. –

+0

@Brett Bender: Ooh, sehr guter Punkt. Ich werde die Antwort bearbeiten, um das zu reflektieren. –

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

Sie doppelte Anführungszeichen mit Apostroph ersetzen soll . Es wird Ihre Zeit sparen

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! Verrückt! Warum das? – Trip

+0

Wenn Sie eine Zeichenkette in Anführungszeichen schreiben, führt Ruby eine String-Interpolation durch, die den Prozess verlangsamt. – crazycrv

Verwandte Themen