2013-04-29 30 views
0

在我的網站,我允許用戶發表的帖子如何將許多話題標籤分離到用戶帖子的單獨頁面上?

這是當前郵政創建控制器看起來像

 def create 
     @post = current_user.posts.build(params[:post]) 
    if @post.save 
     flash[:success] = "Posted!" 
     redirect_to home_path 
    else 
     @feed_items = [] 
     render 'static_pages/home' 
    end 
    end 

我想創建一個名爲「瀏覽」新的一頁,我想按降序列出所有標籤。這些井號標籤將從上述帖子中拉出。什麼是拉動標籤(可能是單個帖子中使用的1或2+標籤)的最佳方式,並將其顯示在這個新的瀏覽頁面中?

回答

1

您可以使用正則表達式從文本中提取哈希標籤。這裏有一個線程:Best HashTag Regex這篇文章是關於.NET的,但正則表達式非常普遍,所以你應該能夠使用那裏的東西。 (我建議Rubular測試正則表達式)。這一次似乎流行:

hashtag_regex = /\b#\w\w+/ 

現在,你有一個當你拉#標籤出這樣不同的選擇:

方案一

您可以實時拉出來」 ',當用戶加載瀏覽頁面時。這可能會更容易編碼,但不夠靈活 - 您可能無法執行按標籤搜索帖子或計算特定標籤出現次數等內容。在這種情況下,您可以通過瀏覽網頁渲染視圖提取主題標籤,例如,像這樣:

<% @posts.each do |post| %> 
    Text: <%= post.text %>. Hashtags: <%= post.text.scan(hashtag_regex).join(',') %> 
<% end %> 

方案二

創建後時,您可以提取主題標籤/編輯,存儲它們,無論是在Post模型的新領域,或在相關模型(郵政has_many :hashtags),像這樣:

def create 
    @post = current_user.posts.build(params[:post]) 
    @post.hashtags = @post.text.scan(hashtag_regex) 

或作爲樁模型回調:

class Post < AR:B 
    before_save :extract_hashtags 

    def extract_hashtags 
    hashtags = text.scan(hashtag_regex) 
    end 
end 

然後簡單地顯示出來:

<% @posts.each do |post| %> 
    Text: <%= post.text %>. Hashtags: <%= post.hashtags %> 
<% end %> 

這種方法可能會更有效,並通過將數據庫中的井號標籤在自己的領域或表,你就必須進行排序的能力由他們,搜索他們,或者數它們。

我希望這是有幫助的。

+0

謝謝!我可能會去第二個選項。我不想顯示'post.text',只是'post.hashtags'。是否可以在這些井號標籤上使用'(「created_at desc」)'並按日期排序? – 2013-04-29 18:30:07

+0

如果你使用關聯的模型選項(創建一個'Hashtag'模型),那麼你可以爲它們的每個實例創建一個'created_at'日期(實際上默認情況下會有)。如果你使用Post模型中的'field'選項,你可以破解使用Post的'created_at'或'updated_at'字段的東西,但我不確定這是否足夠滿足你的目的。 – MrTheWalrus 2013-04-29 18:32:33

+0

最後一個問題,你是否熟悉'Twitter-Text-Rb Gem'?你知道這是否對我的情況有用嗎? – 2013-04-29 18:42:15

相關問題