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 --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Andrew C. Greenberg
2007-Mar-05 18:56 UTC
Re: problems with counter cache on trunk (rev: 5788)
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. On Dec 25, 2006, at 12:25 PM, Abdur-Rahman wrote:> > 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 > > >--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---