So i've got this namespaced model like this:

   module Shop
     class Cart < ActiveRecord::Base
       has_many :cart_items, :dependent => :delete_all
     end
     class CartItem < ActiveRecord::Base; end
   end

If I try to destroy a cart I get the error "Shop is not missing  
constant CartItem" which comes from the load_missing_constant method  
in Dependencies. The configure_for_dependency method (in  
ActiveRecord::Associations) sets up a before_destroy block callback  
using just CartItem as the class name. When the callback is triggered  
ruby obviously fires const_missing(CartItem) on Shop::Cart which  
can't find 'shop/cart/cart_item.rb' and then tries to load the  
missing constant in the parent (Shop) which then triggers the  
exception because it's already loaded.

Two questions:

1. What would you consider is the bug(s) - if any?
2. How would you prefer the bug(s) (if any) to be fixed?

My thoughts are:

On a simple level you could consider it a bug that the association  
callback (and name_for_class_name in reflection.rb) don't take  
account of the parent module but fixing it in AR could be messy if  
you need to reference top level models from inside your module. So my  
personal opinion is that the bug must be in load_missing_constant.

If I comment out the line where exception is raised it actually works  
okay so maybe the exception is unnecessary? However looking at the  
code in dependencies.rb I'm not sure that something else is wrong -  
for example Class.const_missing calls load_missing_constant and then  
calls parent.const_missing on a NameError exception, however  
load_missing_constant also calls parent.const_missing and raises  
NameError if it is not found causing the parent to searched twice for  
the missing constant.

Another thing is that AFAICS whenever using a demodulized class name  
from inside another class within a module then load_missing_constant  
attempts to load the missing file, even though it has already seen it  
once.

So should I try and refactor the Dependencies code to handle  
namespaced models more cleanly or should I just try and fix it in AR?


Andrew White

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Core" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-core?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to