我正在尝试在我的标记帮助器方法类中创建一个方法,当有人发布一个时,将“#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
答案 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
不会更新。