如何将众多主题标签分隔到用户帖子的单独页面上?

时间:2013-04-29 01:28:00

标签: ruby-on-rails ruby ruby-on-rails-3 rubygems hashtag

在我的网站上,我允许用户发帖

这是当前Post创建控制器的样子

     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

我想创建一个名为“browse”的新页面,我想按降序列出所有主题标签。这些主题标签将从上述帖子中提取。拉出主题标签的最佳方法是什么(可以是单个帖子中使用的1或2个主题标签)并在这个新的浏览页面中显示它们?

1 个答案:

答案 0 :(得分:1)

您可以使用正则表达式从文本中提取主题标签。这里有一个帖子:Best HashTag Regex这篇文章是关于.NET的,但正则表达式非常普遍,所以你应该可以在那里使用它。 (我建议使用Rubular来测试正则表达式)。这个似乎很受欢迎:

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

现在,您可以选择何时以这种方式拉出主题标签:

选项一

当用户加载“浏览”页面时,您可以“实时”将它们拉出来。这可能更容易编码,但灵活性较差 - 您可能无法通过hashtag搜索帖子或计算特定主题标签的出现次数。在这种情况下,您可以在“浏览”页面呈现的视图中提取主题标签,例如,如下所示:

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

选项二

您可以在创建/编辑帖子时提取主题标签,并将其存储在Post模型的新字段中,或存储在关联的模型中(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 %>

这种方法可能稍微高效一点,通过将数据库中的主题标签放在他们自己的字段或表中,您就可以按照它们排序,搜索它们或计算它们。

我希望这有用。