On 8 Apr 2009, at 13:11, Erwin wrote:
>
> TESTING in the console :
> script/console
> Loading development environment (Rails 2.3.2)
>>> Email.new
> => #<Email id: nil, sender_email: nil, subject: nil, content: nil,
> user_id: nil, created_at: nil, updated_at: nil, title: "mr",
> firstname: "", lastname: "Anonymous", type: nil>    (Note : type is
> nil, not "Email" ... ?)
>>> RequestEmail.new
> => #<RequestEmail id: nil, sender_email: nil, subject: nil, content:
> nil, user_id: nil, created_at: nil, updated_at: nil, title: "mr",
> firstname: "", lastname: "Anonymous", type: "RequestEmail">
>>> exit
>
> now TESTING again..
> script/console
> Loading development environment (Rails 2.3.2)
>>> RequestEmail.new
> NameError: uninitialized constant RequestEmail
> ...const_missing
>
> I'll appreciate some feedback , should I buy a 2nd glass ?  LOL
>

If you try an eval a constant that does not exist const_missing is  
called (which by default raises NameError)
Rails implements a const_missing that tries to load the file  
containing the constant for you. Rails can't guess where you've put  
your models, so this only works if you stick to the conventions:  
email.rb contains Email, FooController is in foo_controller.rb etc.

If you use Email before RequestEmail then email.rb is loaded (which  
defines both those classes) because Rails knows to load email.rb is  
const_missing triggers on Email. WHen you do things the other way  
round rails does not know what to do with RequestEmail since there is  
no request_email.rb. require_dependency works because it loads email.rb

Fred

> thanks
>
> >


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" 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-talk?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to