2011-04-18 58 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/") %>