running 2.3.2
simple case (db table created : ‘emails’ with a :type field)
I have the following Email model
class Email < ActiveRecord::Base
…
end
class RequestEmail < Email
…
end
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
thanks
found a trcik , but I don’t understand why …
In my ApplicationController
require_dependency ‘email’
On 8 Apr 2009, at 13:11, Erwin wrote:
=> #<RequestEmail id: nil, sender_email: nil, subject: nil, content:
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