Ruby on rails 如何修复带有链接(例如“test@test2”但@test2链接到@test')的渲染;s页

Ruby on rails 如何修复带有链接(例如“test@test2”但@test2链接到@test')的渲染;s页,ruby-on-rails,ruby,mention,Ruby On Rails,Ruby,Mention,我已经制作了一个助手方法来处理推文的主体,这样如果有任何提及,就会添加一个链接到推文中。它确实会这样做,但是当提到的用户名与较长用户名的一部分匹配时(例如@test@test2),只有@test会被链接 生成的html如下所示: 二, 我如何使它看起来像这样: 这是我的助手方法: def render_body(twit) return twit.body unless twit.mentions.any? processed_body = twit.body.to

我已经制作了一个助手方法来处理推文的主体,这样如果有任何提及,就会添加一个链接到推文中。它确实会这样做,但是当提到的用户名与较长用户名的一部分匹配时(例如@test@test2),只有@test会被链接

生成的html如下所示: 二,

我如何使它看起来像这样:

这是我的助手方法:

    def render_body(twit)
     return twit.body unless twit.mentions.any?
     processed_body = twit.body.to_s
     twit.mentions.each do |mention|
       processed_body = processed_body.gsub("@#{mention.user.username}", "<a href='/user/#{mention.user.id}'>@#{mention.user.username}</a>")
     end
     return processed_body.html_safe
    end
def渲染体(twit)
除非twit.提到,否则返回twit.body.有吗?
已处理体=twit.body.to\u s
每一个都提到|
processed_body=processed_body.gsub(“@#{nity.user.username}”,“”)
结束
返回已处理的\u body.html\u safe
结束

我已经检查了数据库,它确实记录了@test2,它只是无法呈现它。

简单的字符串替换在这里不起作用,您必须使用锚定正则表达式。这意味着您永远不会匹配单词的部分,而只匹配整个单词:

processed_body=processed_body.gsub(/\b@#{提及.user.username}\b/,
"")
在这里,我们用正则表达式替换了模式字符串,并使用
\b
将其锚定到单词边界