在我的网站上,我允许用户发帖
这是当前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个主题标签)并在这个新的浏览页面中显示它们?
答案 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 %>
这种方法可能稍微高效一点,通过将数据库中的主题标签放在他们自己的字段或表中,您就可以按照它们排序,搜索它们或计算它们。
我希望这有用。