我在integer
表上有Users
列,名为rating_number
。这个数字将由两件事组成。
likes
的总数到目前为止,我的印象部分得到了照顾。我在用户模型上使用带有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进行投票系统。
答案 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