Forum: Ruby on Rails problems with counter cache on trunk (rev: 5788)

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
C8281c36e1559d457dddd257ac587457?d=identicon&s=25 Abdur-Rahman (Guest)
on 2006-12-31 00:40
(Received via mailing list)
Hi guys,

I have a problem with counter cache on the rails trunk version. I have
the following test case (tried to post on core mailing list but looks
like it isn't accepting my mail):

doc = Document.new
assert doc.bookmarks.create()
assert doc.save!
assert doc.reload
assert_equal 1, doc.bookmarks_count

But doc.save! sets the bookmarks_count column on document to 0 (after
it has been raised by bookmarks.create)

the following queries can be found in log:

1. SELECT * FROM documents WHERE (documents.id = 1)
2. UPDATE documents SET bookmarks_count = bookmarks_count + 1 WHERE (id
= 1)
3. COMMIT
4. BEGIN
5. SELECT * FROM bookmarks WHERE (bookmarks.bookmarkable_id = 1 AND
bookmarks.bookmarkable_type = 'Document')
6. UPDATE documents SET `content` = NULL, `bookmarks_count` = 0, `name`
= NULL WHERE id = 1
7. COMMIT

quite frustrating... :S

My models:

-- Document.rb:
class Document < ActiveRecord::Base
 has_many :bookmarks, :as => :bookmarkable, :dependent => :destroy
end

-- Bookmark.rb:
class Bookmark < ActiveRecord::Base
 # associations
 belongs_to :bookmarkable, :polymorphic => true, :counter_cache =>
"bookmarks_count"
end

Thnx,

Abdul
Ff5b4846b93008ffb2161805fa00af5f?d=identicon&s=25 Andrew C. Greenberg (Guest)
on 2007-03-05 19:57
(Received via mailing list)
Same deal here, although it is far classier to present the bug as a
failed test.  The memory version of Document isn't updating on the
create, although the increment SQL was geerated.  Thus, the save of
Doc overwrites the properly updated database info so that the reload
has the old, pre-creation, value of the counter cache.

This really used to work for me -- don't know where it went bad.

I'm working on a scratch 1.2.2 install.
This topic is locked and can not be replied to.