counter cache not working

Hi guys,

I have a problem with counter cache on the rails trunk version. I have the following test case:

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) e 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

I've experienced the same problem. There is a ticket already created in the Rails Trac. Hopeful this post will escalate the ticket's priority.

http://dev.rubyonrails.org/ticket/6896

I've experienced the same problem. There is a ticket already created in the Rails Trac. Hopeful this post will escalate the ticket's priority.

http://dev.rubyonrails.org/ticket/6896

This is a fairly intrusive change to be adding late in the piece. The attr_readonly fix is a nice enhancement, and can perhaps be applied more broadly. However it probably needs a little more thought:

* Should read only attributes have mutators at all? * If they do, in what conditions should they raise exceptions vs updating the attributes hash * What other attributes in the system should be attr_readonly (inheritance_column being the first case which jumps to mind[1])

Etc. I like where it's going, but I can't really see it happening so close to RC2.