Ruby on rails Rails:如何实现Post视图的数量?

Ruby on rails Rails:如何实现Post视图的数量?,ruby-on-rails,ruby,database,post,views,Ruby On Rails,Ruby,Database,Post,Views,有什么问题吗?: 我正在创建一个通用博客,并致力于创建基本功能。 问题是视图(有多少人看过某个帖子)显示不正确 最新技术: 我现在有两个控制器/模型:Post和Comment。我将为您提供我的模式,以帮助您更好地了解情况 create_table "comments", :force => true do |t| t.string "name" t.text "body" t.integer "like" t.integer "hate" t.integer "post_

有什么问题吗?:

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

最新技术:

我现在有两个控制器/模型:Post和Comment。我将为您提供我的模式,以帮助您更好地了解情况

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控制器中,每当有人创建Post时,我都试图通过将其设置为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文件中,我也添加了下面的部分。

意见:

它的工作原理: 视图的数量根本没有显示。我检查了数据库,即使我尝试在用户添加帖子时将其初始化为0,该列仍然为空。我猜我尝试访问“view”变量的方式有问题?这样做是不对的吗
@view=@post.view?

<>我意识到一个事实,那就是我必须考虑一个已经看过文章的用户,但是直到我完全知道如何访问视图变量/初始化/增加它时,我才知道。 我真的很感谢你的帮助


-Max

在调用@Post.save之前将Post的视图属性初始化为零(作为if语句的副作用):

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


保存数据库后,将
@view
分配给此处的值将一事无成。

很好!成功了!非常感谢。自我提示:在PostController的显示操作中,post.view+=1后面必须跟post.save以更新数据库。否则,视图的增量将永远不会超过1,因为我只是更新局部变量@post而没有保存它。最终,您将希望移动到一个系统,在该系统中,您不是通过增加数据库中的字段,而是通过在单独的表中插入新行来计算页面视图。然后,通过对记录视图的表执行聚合来获得总计。这将减少数据库读/写的波动性,同时进行多次点击,并且您可以使用URL记录IP地址,以避免重复计算同一个人。
@post.view = 0