Hi, I have this 'legacy' RoR application, in which, at one place, we're doing something like this :
Sudarshan Purohit wrote:
ModelT.brand ModelT.make_of_car
The only properties that ModelT has are the ones that it get from ActiveRecord.
There haven't been any code changes since we migrated. So either there's something wrong with ActiveRecord/Rails, or there's something wrong with our code that used to slip through ;). Could someone please help out, or point me to some resource that could?
How are your tests doing?
Can you add a method_missing to ModelT, and get these methods to work again?
Can you edit boot.rb, go back to 1.1.4, pass all tests, tick to 1.1.5, pass all tests, and keep going until the tests break?
Can you diff -r the two versions of ActiveRecord to see what got removed?
Hi,
How are your tests doing?
I'm ashamed to say that they're passing - because they don't cover this particular Model class(es). It's the only class that uses class.new, though, so other stuff passes through the tests fine. There's one interesting bit here: The tests run in 'test' environment mode, and I tried running the same code in a 'Production' environment, too, and the problem totally disappears in Production environment. It only appears in Development environment... So maybe there's some environment-related option that freezes classes, or suchlike? I should try to create simpler code snippets that replicate the problem. Will keep folks posted. In case anyone's interested, the options in my development.rb file are :
config.cache_classes = false config.whiny_nils = true config.breakpoint_server = true config.action_controller.consider_all_requests_local = true config.action_controller.perform_caching = false config.action_view.cache_template_extensions = false config.action_view.debug_rjs = true
Can you add a method_missing to ModelT, and get these methods to work again?
Not sure how that would help... this would be like a handler to take action when an undefined method is called, right?
Can you edit boot.rb, go back to 1.1.4, pass all tests, tick to 1.1.5, pass all tests, and keep going until the tests break?
Working on this right now...
Can you diff -r the two versions of ActiveRecord to see what got removed?
There are apparently loads of differences - earlier I used 1.14.4, and now I'm using 1.15.3, so almost every file seems different in some way.
Thanks, Sudarshan
Hi, Putting down the sort-of solution, for anyone else who googles for "model T"s and "Rails". The problem is caused due to this Rails issue : http://dev.rubyonrails.org/ticket/7856 [AR objects with associations behave badly after deserialization]. I was using Object.const_set to save the generated classes (ModelT in this case), and then querying and retrieving using Object.const_defined? and const_get in a different context. After this, I was unable to access any of the methods and associations of the object class. For now, I removed this caching while in the Development environment.
Cheers, Sudarshan