I've got some code I've been using for a while, which is a generic controller 
so I don't need endless identical controller methods in my basic controller 
classes.

In my generic new, I do this:

 def new
   @thing = my_model.new
 end

and my_model winds up in this:

 def self.model_from_controller_name(name)
   (@model_name_cache ||= {})[name] ||= 
table_name_from_controller_name(name).singularize.camelize.constantize
 end

and all of this works reasonably, except that the second time I use my 
controller this way, the instance I get back fails to do all sorts of basic 
stuff. For example, it fails to call the id method on ActiveRecord::Base — 
instead, it gets stuck in a recursive loop in method_missing.

This would appear to be something to do with some non-obvious class reloading 
behavior, perhaps because I'm in development mode. If I take the caching out, 
the problem disappears.

Should I just give up on the caching here? I'd like to understand why caching a 
reference to a model class should fail.

(BTW, this relates to a previous post earlier this evening; I've now tied it 
down more, so I thought I'd start a new topic).

-- 
SD Ruby mailing list
[email protected]
http://groups.google.com/group/sdruby

Reply via email to