2014-03-05 153 views
0

我想創建一個方法在我的標籤幫助器方法類中,當有人發帖時將「#hashtags」,「@usertags」和「$ moneytags」變成鏈接。它應該找到這些標籤中的每一個,並將整個單詞變成一個鏈接。我知道它沒有||,但我需要它做,如果他們中的任何一個是真的。需要幫助鏈接標籤,但我想要多個標籤

現在它標籤usertags,但不是其他標籤。我知道REGEX是正確的,但是,我認爲|| ORs應該是這樣工作的。

有沒有一種更有效的方法在一種方法中搜索這些方法?如果我使用了三種方法,每種標籤一種,我會有三個重複的帖子,因爲我的方法讀取帖子並將標籤作爲鏈接吐出整個帖子。

這是最初的三種方法,但由於這個問題,我必須在同一個方法中使用它。它應該是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

使用標籤的提示:使用擁有追隨者的提示。例如,[tag:ruby-on-rails]比[tag:ruby-on-rails-4]有更多的人在觀看,而[tag:helpers]和[tag:#hashtag]基本上毫無價值。 –

+0

我認爲是這樣,但我只是放入5,因爲它允許我使用5個標籤。 –

回答

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

+0

錯誤的參數類型Array(預期的正則表達式)是它給我的。當我使用正則表達式時,它給我的正式論證不能是一個常數。 –

+0

我有一個錯誤的答案:'regexp'而不是'regex'。更新了我的答案。再試一次。 – spickermann

+0

謝謝你的作品!我知道我應該做一個循環。我在看elsif是否也適合它。再次感謝你! –

相關問題