counter_cache увеличивается в два раза - PullRequest
0 голосов
/ 10 сентября 2018

Rails 3.2.14

Ruby 2.1.7

При использовании counter_cache столбец счетчика увеличивается на 2 вместо 1. Например:

class Finger < BaseModel
  belongs_to :hand, :counter_cache => true
end

class Hand < BaseModel
  has_many :fingers
end

Итак, если я сделаю:

finger = Finger.new(:hand_id => 1)
finger.save

, я увижу в консоли:

(0.2ms)  BEGIN
SQL (4.3ms)  INSERT INTO "fingers" ("hand_id") VALUES ($1) RETURNING "id"  [["hand_id", 311222]
Hand Load (0.4ms)  SELECT "hands".* FROM "hands" WHERE "hands"."id" = 311222 LIMIT 1
SQL (0.7ms)  UPDATE "hands" SET "fingers_count" = COALESCE("fingers_count", 0) + 1 WHERE "hands"."id" = 311222
(8.2ms)  COMMIT
=> true

Итак, как вы можете видеть, COALESCE вызывается только один раз.

Но тогда:

Hand[1].fingers_count
> 2

Но:

Hand[1].fingers.count
> 1

В моем приложении все это делается с помощью готовых форм рельсов, которые создают новый палец, связанный сРука.

...