需要帮助链接标记,但我想要多个标记

时间:2014-03-05 03:48:03

标签: ruby-on-rails ruby gem

我正在尝试在我的标记帮助器方法类中创建一个方法,当有人发布一个时,将“#hashtags”,“@ susertags”和“$ moneytags”转换为链接。它应该找到每个标签并将整个单词转换为链接。我知道它在没有||的情况下有效,但如果其中任何一个都是真的,我需要它做。

现在它标记了usertags,但不标记其他标签。我知道REGEX是正确的,但是,我不认为|| OR应该像那样工作。

有一种更有效的方法可以在一种方法中搜索每种方法吗?如果我使用三个方法,每个标签一个,我会有三个重复的帖子,因为我的方法读取帖子并将标签作为链接吐出整个帖子。

这最初是三种方法,但由于这个问题,我必须在同一种方法中使用它。它应该是Twitter和其他使用标签的网站如何做到的。

我可能也应该说我创造了这个作为任何人都可以使用的宝石。有什么建议或帮助吗?

def linkify_tags(taggable_content)
    regex = Supertag::Tag::USERTAG_REGEX
    tagged_content = taggable_content.to_s.gsub(regex) do
      link_to($&, tag_path($2), {class: :tag})
    end
    tagged_content.html_safe ||
    regex = Supertag::Tag::HASHTAG_REGEX
    tagged_content = taggable_content.to_s.gsub(regex) do
      link_to($&, tag_path($2), {class: :tag})
    end
    tagged_content.html_safe ||
    regex = Supertag::Tag::MONEYTAG_REGEX
    tagged_content = taggable_content.to_s.gsub(regex) do
      link_to($&, tag_path($2), {class: :tag})
    end
    tagged_content.html_safe
  end

1 个答案:

答案 0 :(得分:1)

试试这个:

REGEXS = [Supertag::Tag::USERTAG_REGEX, Supertag::Tag::HASHTAG_REGEX, Supertag::Tag::MONEYTAG_REGEX]

def linkify_tags(taggable_content)
  text = taggable_content.to_s

  REGEXS.each do |regex|
    text = text.gsub(regex) { link_to($&, tag_path($2), class: 'tag') }
  end     

  text.html_safe
end

您的代码存在的问题是

tagged_content.html_safe ||
regex = Supertag::Tag::HASHTAG_REGEX

(tagged_content.html_safe || regex) = Supertag::Tag::HASHTAG_REGEX相同。这可能不是你想要的。由于tagged_content.html_safe始终为true,因此regex不会更新。