Bug? found by way of counter_cache/default bug

I decided that I wanted tags with counts on my custom rails blog
(shameless plug: http://rorek.org/blog/ ), so I perhaps ill-advisedly
commenced editing the acts_as_taggable plugin in place. I ran up
against a bug: the :default for the taggings_count field apparently
wasn’t working, and was set to nil for new tags. Continuing on my
spate of perhaps ill-advised behavior, I decided to try to work around
the problem like so (with extra p’s to display the weird behavior):

added to vendor/plugins/acts_as_taggable/tag.rb:
def before_save
# XXX I should really find out why :default doesn’t work
if taggings_count_before_type_cast.nil?
p taggings_count
p taggings_count_before_type_cast
n = Tagging.count(:conditions => [‘tag_id = ?’, self.id])
taggings_count = n
p n
p self.id
p taggings_count
p taggings_count_before_type_cast

end

end

Tag.find(:all, :conditions => ‘taggings_count is NULL’).each{|t|t.save}
1
nil
1
42
1
nil
=> [#<Tag:0x99c09c4 @taggings=[#<Tagging:0x99b9bd8
@attributes={“tag_id”=>“42”, “id”=>“202”, “taggable_type”=>“Post”,
“taggable_id”=>“18”}>], @errors=#<ActiveRecord::Errors:0x99bf2cc
@base=#<Tag:0x99c09c4 …>, @errors={}>,
@attributes={“name”=>“software”, “taggings_count”=>nil, “id”=>“42”},
@new_record_before_save=nil>]

I tried a number of incarnations of this method, calling it validate,
and after_save with a save at the end. nothing worked.

Happily, my string of ill-advised behavior ended and I updated to the
newest edge rails, 5982. This fixed the original problem, and now new
tags are created with the correct taggings_count. However, it seems to
me that this should work to fix the data, and yet it doesn’t. Why’s
that?

Dag

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs