I've got a situation where at least on the surface it appears I'm
the victim of some aggressive caching. I've got something like:
Child belongs_to :parent
I have a method in Parent
def special_children
list = []
Child.find_all_by_applicant_id(self.id).each do |c|
<do some calculating and picking and choosing, and
build up "list" as we go>
end
return list
end
I also explicitly do *not* want to have an association available that
just returns all children, thus no has_many in the Parent definition.
My problem is that there are times when I do something like:
p = Parent.find(<blah>)
# may already have children, but add more...
c = Child.new(params)
begin
Parent.transaction do
c.parent = p
p.save!
c.save!
if (some set of conditions)
raise "no can do"
end
end
rescue
do something with p.special_children
end
But in the rescue, special_children includes the new child that
never actually was saved. It's not in the database.
Parent.clear_association_cache does not help, I think because
Parent.special_children is not really an association.
The *only* thing I've had work so far is to add
ActiveRecord::Base.connection.clear_query_cache
to my special_children method.
My question is, is that really an acceptable fix? Feels like using
a howitzer to swat a mosquito.
I'm on the very edge of understanding here, so if anyone sees a cleaner
alternate approach, I'd love to hear it. I think my special_children
logic may be a bit much to be able to just stuff into a :conditions
clause in a has_many, but I haven't pushed too hard on that yet.
Thanks in advance...
-glenn
--~--~---------~--~----~------------~-------~--~----~
SD Ruby mailing list
[email protected]
http://groups.google.com/group/sdruby
-~----------~----~----~----~------~----~------~--~---