1

当用户输入评论时,我想研究在他们的网站上制作类似 Youtube 的功能,如果他们有类似“@username”的内容,系统会识别“@”符号并链接到用户名的评论。我正在使用 Rails 3 进行开发,但有关此功能所需逻辑的任何信息将不胜感激,谢谢。

编辑:附加问题:放置逻辑的最佳位置在哪里?我觉得控制器会这样,如果客户端没有javascript,它仍然可以工作。

4

1 回答 1

3

我确信有多种(甚至更好)的方法可以做到这一点。我是怎么做到的——

解析输入字符串的函数:我写了一个辅助函数 -

  1. 它遍历了帖子中的每个单词以及所有以“@”开头的单词
  2. 对于每个这样的词,它都会检查用户是否存在于应用程序中。
  3. 如果是,则将该单词替换为指向用户配置文件的链接。
  4. 将新帖子(带有链接的帖子)写入数据库。

    def mention_users_and_tags(post)
        post_with_user_links = ""
        words = post.message.split
        words.each do |word|
            if word[0] =~ /^@.*/ and word.length > 1
                if extract_user_if_exists(word[1,word.length-1])
                    post_with_user_links << "#{link_to "#{word}", :controller => "users", :action => "show", :id => @mentioned_user.id} "
                else
                    post_with_user_links << word << " "
                end
            end
        end
    end
    

编辑 - 我认为这个方法应该写在模型中并在控制器中调用。这是我第一次在 Rails 中编码,所以我不太确定一切都在哪里,我把它写成一个辅助函数。但现在我知道所有业务逻辑都在模型中。由于在帖子中提及用户可以被视为业务逻辑的一部分,因此我会在模型中为其编写一个函数。

于 2012-04-14T10:26:58.937 回答