【问题标题】:How to create a 'page counter' in a controller in rails如何在 Rails 的控制器中创建“页面计数器”
【发布时间】:2016-11-24 18:23:01
【问题描述】:

我有一个 Post 模型,并且我想实现一种方法来计算通过 posts_controller 访问帖子的次数,以便我最终可以按查看次数对帖子进行排序。到目前为止,我已经创建了一个迁移,以按 Post 模型添加一个“视图计数”列:

class AddViewcountToPosts < ActiveRecord::Migration
  def change
    add_column :posts, :view_count, :integer
  end
end

我基本上希望 PostsController show 方法中的某些内容在每次访问 show 操作时向 view_count 列添加一个。

任何帮助将不胜感激:)

【问题讨论】:

  • 你在问题​​中有 70% 的解决方案。你只需要用代码表达你的话。 :) 看来您对数据库/模型不是很有信心。在这种情况下(重新)阅读 rails 教程会有所帮助。

标签: ruby-on-rails ruby


【解决方案1】:

您可以在show 操作中增加此计数器。

def show
  # ...
  @post.increment!(:view_count)
end

这里没有魔法:)

【讨论】:

  • 添加到此,为您的迁移添加默认值0,例如:add_column :posts, :view_count, :integer, default: 0
  • apidock.com/rails/ActiveRecord/Persistence/increment 如果为 nil,则将属性初始化为零,并添加作为 by 传递的值(默认为 1)。
  • 太棒了,没想到这么简单!在谷歌搜索类似的解决方案时找不到任何东西,所以我想我用错了词,谢谢:)
  • 请注意,如果您有大量的面,这将极大地增加您的数据库写入。我会将其移至 Sideqik 工作人员中。
【解决方案2】:

使用 rails increment 来实现这一点

class PostsController < ApplicationController
  before_filter :find_post, only: [:show]
  before_filter :increment_view_count, only: [:show]

  def show
    # ...
  end

  private

  def find_post
    @post = Post.find(params[:id])
  end

  def increment_view_count
    @post.increment(:view_count)
  end
end

【讨论】:

    猜你喜欢
    • 2016-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-26
    • 1970-01-01
    • 2017-11-16
    • 1970-01-01
    相关资源
    最近更新 更多