新手问题 @ 的相关问题

sanvi · 2012年10月07日 · 最后由 woaigithub 回复于 2012年10月09日 · 2445 次阅读

我在评论加了 At.js

保存进去是纯文本,那么我显示出来怎么给他加链接呢?

要不就是写个 helper 的 tag 去循环每个评论的 body,但感觉这样不太好

要不就是保存进去是 HTML,那么怎么存 HTML 进去?

存文本,每次 parse 一次。

#1 楼 @xds2000 没太懂,能具体点吗

你不是有两个 option 了吗?我选择,第一个,保存进去是纯文本。给文本加的连接都是固定的 pattern。用个 helper 方法喽。

#3 楼 @xds2000 用正则来匹配@ 如果是就替换成链接

你不用想了。用前端 Jquery 去 render 吧。 https://github.com/ichord/jquery-atwho-rails

这个方法比我们想的方法更高效。用客户端的 js 去给@ 加样式。

#5 楼 @xds2000 对啊,我是用他的,现在是评论的显示问题,我可以用他提交评论,但评论列表显示出来的是纯文本

ruby-china 源码,打开 config/initializers/markdown.rb

# convert '@user' to link                                                    
# match any user even not exist.                                             
def self.link_mention_user(text)                                             
   text.gsub!(/(^|[^a-zA-Z0-9_!#\$%&*@@])@([a-zA-Z0-9_]{1,20})/io) {         
     %(#{$1}<a href="/#{$2}" class="at_user" title="@#{$2}"><i>@</i>#{$2}</a>)
   }                                                                          
end      

解决你的问题,还帮给 ruby-china 打个小补丁。 https://github.com/ruby-china/ruby-china/pull/99

#10 楼 @xds2000

comment.body.gsub(/(^|[^a-zA-Z0-9_!#\$%&*@@])@(.+\s{1})/io) { %(#{$1}@#{$2}) }

comment.body.gsub(/(^|[^a-zA-Z0-9_!#\$%&*@@])@(.+\s{1})/io) {
    %(#{$1}<a href="#{user_path(comment.account)}" class="at_user" title="@#{$2}"><i>@</i>#{$2}</a>)
}

文字连接地址从哪里来呢? 我在评论里面写上 我爱祖国 然后保存了,你准备给我加上什么连接呢!!

是不是应该这么理解。 你的评论是支持 html 标签的,也就是富文本,至少是部分的标签,然后你连带标签一起保存,然后显示的时候格式化一下,rails 有这方面的函数。escape 一下就可以了。

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