您可以使用正则表达式从文本中提取主题标签。这里有一个线程: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 %>
这种方法可能稍微高效一些,并且通过将主题标签放在数据库中它们自己的字段或表中,您将能够按它们排序、搜索或计算它们。
我希望这是有帮助的。