2011-04-18 59 views
1

什麼是一個好方法來「自動鏈接」@像在他們面前像Twitter一樣? 例如auto_link_user(「你好@馬特請發送文件[email protected]」)將返回 「你好@matt請發送文件[email protected]紅寶石自動鏈接用戶名

我想正是這樣做的紅寶石http://www.ideone.com/aGklx

+0

@somename應指向嘰嘰喳喳或您的本地應用程序的用戶? – 2011-04-18 16:36:26

+0

@Naren - 我們希望解決方案具有靈活性,類似於我發佈的鏈接,即http://www.ideone.com/aGklx – sthapit 2011-04-18 16:42:15

回答

1
str = "@foo, I'm @bar. My email is [email protected]" 
r = /(^|\s)@([a-z0-9_]+)/i 

str.gsub(r){|x| "#{$1}<a href=\"http://wwww.twitter.com/#{$2}\">@#{$2}<a/>"} 
#=> "<a href=\"http://wwww.twitter.com/foo\">@foo<a/>, I'm <a href=\"http://wwww.twitter.com/bar\">@bar<a/>. My email is [email protected]" 

使用String#gsub

+0

OP鏈接到的PHP代碼的直接Ruby端口。 +1 – 2011-04-18 17:35:27

+0

完美。謝謝! – sthapit 2011-04-19 01:44:28

+0

@Mike Lewis - 如何自動鏈接字符串,如str =「嗨,這是@username發佈的#示例代碼」。如何鏈接用戶名和#hash標籤 – useranon 2012-02-29 06:08:35

0

如果你正在尋找直接鏈接到Twitter(從你的問題是不明確,如果這是你想要做的),那麼你應該看看他們的@anywhere API。

編輯:你可以的話,而不是紅寶石做,你要在客戶端的JavaScript做什麼:

<script type="text/javascript"> 
    twttr.anywhere(function (T) { 
     T("#linkify-this-content").linkifyUsers(); 
    }); 
</script> 

這不正是你要找的,似乎,但它是一個選項。

+0

我正在嘗試完成此http://www.ideone。 Ruby中的com/aGklx。 – sthapit 2011-04-18 16:25:42

+0

您是否訪問過我發佈的鏈接? – Nick 2011-04-18 16:30:02

+0

是的,這是一個javascript解決方案。我們需要一個Ruby解決方案。 – sthapit 2011-04-18 16:33:33

0

與基本URL廣義含方式,

def append_urls str, base_url 

str.gsub!(/(^|\s|\b)@([a-z0-9_]+)/i) do |word| 
    word = $2 
"<a href='#{base_url}#{word}'>#{word}</a>" 
end 

end 

這種方法添加到輔助之一,在視圖調用作爲

<%= append_urls(str_to_append_url,"www.twitter.com/") %>