新手问题 @ 功能如何实现?

mistbow · 2013年10月03日 · 最后由 larryzhao 回复于 2016年10月10日 · 6230 次阅读

请问现在的@功能是如何实现的?我现在的想法是:

  1. 正则匹配出用户的姓名
  2. 根据姓名去查询 user 表
  3. 然后给查询出来的 users 发送信息

不知道大家是不是这么实现的,如果是这么实现的,那么正则表达式是不是不够好?如果用户名跟正文连在一起呢?我发现 ruby-china 的内容即使连接到一起了 还是可以匹配到用户的,但是没找到实现的代码 ):

有的 我参考了

https://github.com/ruby-china/ruby-china/blob/master/lib/markdown.rb 这个文件中的

# convert '@user' to link
# match any user even not exist.
def link_mention_user_in_text(doc, users)
end

谁这么无聊,又去攻击 Github,本来还想接着看看 ruby-china 代码的,结果…… 建议再看看有关 notification 相关的内容,好像还有个 mention

嗯嗯 感谢各位回答 我再去找找

#2 楼 @edgar_wang_cn 额 github 被墙了。。

#5 楼 @mistbow 不是被墙了,是正在被 DDoS.....

#4 楼 @mistbow #6 楼 @edgar_wang_cn 总是有人给 Github 刷存在感……

如果是前端的话推荐 ichord 的 at.js, 如果是后端的话,直接用 twitter/twitter-text-rb 就 ok 了 , 等 github ok 了我来上项目链接

class MyClass include Twitter::Extractor usernames = extract_mentioned_screen_names("Mentioning @twitter and @jack") # usernames = ["twitter", "jack"] end

我在我们社区里@人的时候 即使没有空格也是能找出来的,不知道 twitter-text-rb 能不能实现呢? #8 楼 @larryzhao

#10 楼 @mistbow 我印象里可能默认不行吧,可能要你自己去 regex.rb 里面改改正则了。

#11 楼 @larryzhao 嗯嗯 目前还不支持中文 如果只是正则的话 自己搞一个就可以啦 就不用他这个了。。。

#12 楼 @mistbow 噢,我的确没考虑中文,我之前用的时候也是都是英文字母的 ID, 不好意思啊

在自己的应用中也用到的类似的东西,思路基本和你一样。 1.ruby-china 源码可以参考; 2.关于@,前端用 atwho.js,在输入之后显示用户名列表,选择完毕之后默认给空格,这样就能匹配到了。 3.关于中文问题,可以试试下面的正则

def match_user_test(str)
   arr = str.scan(/@([\p{Han}+\w]{2,20}\s)/u).flatten
end

4.关于流程,在 comment after_create 后,去 send_comment_notification

mark 一下

#14 楼 @wikimo 我看 ruby-china 请求的时候@后面好像是没有空格的啊

#13 楼 @larryzhao 嘻嘻 :) 还是非常感谢哈

#15 楼 @hlt 有收藏功能的哈。。。

#14 楼 @wikimo at.js 用了 remoteFilter 这个 setting 但是为什么不显示出下拉框呢?

需要 登录 后方可回复, 如果你还没有账号请 注册新账号