使用counter_culture更改同一查询中的多个计数器

时间:2015-10-23 10:36:44

标签: ruby-on-rails activerecord counter-cache

我有以下类,其中有几个counter_culture个计数器用于同一个关联:

class Book < ::ActiveRecord::Base
  belongs_to :user

  counter_culture :user
  counter_culture :user, column_name: Proc.new { |b| b.comedy? ? 'comedy_books_count' : nil }
  counter_culture :user, column_name: Proc.new { |b| b.hard_cover? ? 'hard_cover_books_count' : nil }
end

我遇到的问题是它使用多个查询执行更新:

UPDATE "users" SET "books_count" = COALESCE("books_count", 0) + 1 WHERE "users"."id" = $1  [["id", 1616]]
UPDATE "users" SET "comedy_books_count" = COALESCE("comedy_books_count", 0) + 1 WHERE "users"."id" = $1  [["id", 1616]]
UPDATE "users" SET "hard_cover_books_count" = COALESCE("hard_cover_books_count", 0) + 1 WHERE "users"."id" = $1  [["id", 1616]]

通过在单个查询中执行更新,有没有办法通过 counter_culture 更有效地完成此操作?

1 个答案:

答案 0 :(得分:0)

每一行都被检测为一种特殊情况,他们很难知道哪些可以优化,哪些不能。所以我想不会。