0

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

这就是当前 Post create 控制器的样子

     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+ 个主题标签)并将它们显示在这个新的浏览页面中的最佳方式是什么?

4

1 回答 1

1

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

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

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

选项一

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

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

选项二

您可以在创建/编辑 Post 时提取主题标签,并将它们存储在 Post 模型的新字段或关联模型 (Post has_many :hashtags) 中,如下所示:

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

或者作为 post 模型的回调:

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 %>

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

我希望这是有帮助的。

于 2013-04-29T18:03:17.473 回答