我有軌網站紅寶石具有用戶模型和崗位模型Rails的數屬於用戶
# models/user.rb
class User < ActiveRecord::Base
has_many :posts
end
# models/post.rb
class Post < ActiveRecord::Base
belongs_to :user
is_impressionable
end
正如你可以看到所有的帖子的頁面瀏覽量,我已經使用了impressionist gem統計每個帖子的頁面瀏覽量。 要獲得特定帖子的頁面查看次數,我使用post.impressionist_count。
如何有效地獲取特定用戶所有帖子的頁面瀏覽量總和?最好將此值存儲在數據庫中,因爲我可能需要它來執行更多操作。另外,如果我將此值存儲在數據庫中,每次發佈的查看計數更改時如何更新它?提前致謝!
更新
謝謝大家對你的答案。我試圖融入您的解決方案,但我仍然無法找到解決方案。
我用counter_cache
add_column :posts, :view_count, :integer, default: 0
# models/post.rb
is_impressionable :counter_cache => true, :column_name => :view_count
添加了一個列到用戶表
add_column :users, :total_view_count, :integer, default: 0
然後做這個
# posts_controller
before_action :update_user_total_view_count, only: :show
private
def update_user_total_view_count
@post = Post.find(params[:id]);
@post.user.update_user_total_view_count
end
# user model
def update_user_total_view_count
update(total_view_count: posts.sum(:view_count))
end
我不能使用posts.sum(:impressionist_count)因爲它不是數據庫中的列。我認爲我已經得到了這個工作,但post模型中的view_count沒有正確更新,即使impressionist_count增加,仍然停留在1。任何解決方案謝謝!
該帖子是在其自己的頁面上查看的?所以它有自己的控制器動作來顯示帖子? – RichardAE 2015-03-02 13:11:41
@RichardAE,是的,每個帖子都有自己的頁面。 – prajwaldp 2015-03-02 13:39:06