将整数添加到数据库中的列

时间:2014-05-03 04:52:50

标签: sql ruby-on-rails ruby ruby-on-rails-4

我在integer表上有Users列,名为rating_number。这个数字将由两件事组成。

  1. 页面浏览量的展示次数
  2. 他们在帖子中likes的总数
  3. 到目前为止,我的印象部分得到了照顾。我在用户模型上使用带有counter_cache的gem is_impressionable

    is_impressionable :counter_cache => true, :column_name => :rating_number, :unique => :all
    

    现在,我正在尝试将第二部分添加到该列,即他们在帖子上的总投票数。我通过以下方式获得整数:

    @user = current_user # or some user
    array = @user.posts.map { |post| post.votes.count }
    count = array.inject { |sum, x| sum + x }
    

    其中count是其帖子中votes的总数。每当用户获得其中一个帖子rating_number时,如何以有效的方式自动更新voted_on列。在1成功保存后,我是否应该在帖子def vote操作中手动将vote添加到该列的方向?

    不确定这是否有用,但我也使用thumbs_up gem进行投票系统。

1 个答案:

答案 0 :(得分:0)

根据您的需要,我确信您需要在User模型中使用名为after_update的回调。要了解回叫的工作原理,请阅读Callbacks。但我建议您将数据保存在2个单独的列中,而不是单个列。

class User < ActiveRecord::Base
  after_update :vote_update

  # other methods
  def vote_update
    user = @post.user
    user.rating_number = user.rating_number + 1
    user.save!
  end
end