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