Rails:如何实现帖子查看次数?

Posted

技术标签:

【中文标题】Rails:如何实现帖子查看次数?【英文标题】:Rails: How to Implement Number of Post Views? 【发布时间】:2012-11-11 01:33:27 【问题描述】:

有什么问题?:

我正在创建一个通用博客,并致力于创建基本功能。 问题是视图(有多少人看过特定帖子)没有正确显示。

最先进的技术:

此时我有两个控制器/模型:发布和评论。我将为您提供我的架构,以帮助您更好地了解情况。

create_table "comments", :force => true do |t|
t.string   "name"
t.text     "body"
t.integer  "like"
t.integer  "hate"
t.integer  "post_id"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end

add_index "comments", ["post_id"], :name => "index_comments_on_post_id"

create_table "posts", :force => true do |t|
t.string   "name"
t.text     "content"
t.integer  "view"
t.integer  "like"
t.integer  "hate"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end

我做了什么: 在 Post Controller 中,我尝试通过在有人创建帖子时将其设置为 0 来初始化视图。

# POST /posts
# POST /posts.json
def create
@post = Post.new(params[:post])
@view = @post.view
@view = 0

respond_to do |format|
  if @post.save
    format.html  redirect_to posts_path, notice: 'success.' 
    format.json  render json: @post, status: :created, location: @post 
    @view = @post.view
    @view = 0
  else
    format.html  render action: "new" 
    format.json  render json: @post.errors, status: :unprocessable_entity 
  end

end

并且帖子应该能够显示其查看次数。所以在 post 的 show.html.erb 文件中,我也添加了下面的部分。 <p> <b>views:</b> <%= @post.view %> </p>

它是如何工作的: 根本没有显示视图的数量。我检查了数据库,即使每当用户添加帖子时我尝试将其初始化为 0,该列也是空白的。我猜我尝试访问“视图”变量的方式有问题?通过做访问它是不是正确的 @view = @post.view?

我知道我必须考虑是否已经看过帖子的用户重新访问,但在我确切知道如何访问视图变量/初始化/增加它之前,我还没有到那里。

非常感谢您提前提供的帮助!

-最大

【问题讨论】:

【参考方案1】:

要将 Post 的 view 属性初始化为零,调用@post.save(作为 if 语句的副作用):

@post.view = 0

然后在呈现帖子的控制器操作中,您需要将帖子的视图属性更新 1。如果多个人在数据库读取和写入之间同时访问该页面,这将出现问题,但它至少会让您朝着正确的方向前进。

此处将@view 分配给 保存数据库后的值无济于事。

【讨论】:

不错!有效!谢谢你。自我说明:在 PostController 的显示操作中, post.view += 1 必须后跟 post.save 才能更新数据库。否则,视图将永远不会增加到 1 以上,因为我只是在更新局部变量 @post 而不保存它。 最终,您将希望转移到一个计算页面浏览量的系统不是通过增加数据库中的字段,而是通过将新行插入到单独的表中。然后,您通过对表记录视图执行聚合来获得总计。这将反映出数据库读取/写入和同时多次点击的波动性较小 - 您可以使用 URL 记录 IP 地址以消除重复计算同一个人。

以上是关于Rails:如何实现帖子查看次数?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Rails 中创建通知系统?

按类别和 WordPress 中的查看次数计算帖子

如何在 Rails 视图中呈现所有评论?

如何最好地实施“查看次数”?

在 Woocommerce 产品页面上显示产品查看次数

Ruby on Rails全栈课程3.8 权限管理之超级管理员审批功能实现