# Require in models?

**URL:** <https://www.ruby-forum.com/t/require-in-models/83512>\
**Category:** Rails\
**Created:** [January 26, 2007, 8:29pm UTC](https://www.ruby-forum.com/t/require-in-models/83512 "2007-01-26T20:29:40Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![lee](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/bc8723/32.png) [@lee](https://www.ruby-forum.com/u/lee)\
**Post date:** [January 26, 2007, 8:29pm UTC](https://www.ruby-forum.com/t/require-in-models/83512/1 "2007-01-26T20:29:40Z")

</div>

I am getting the error “Missing model property.rb” whenever I insert  
require statements into my model (in this case property.rb). The error  
occurs when I try to access my application through the browser. As soon  
as I remove the require, the error no longer occurs.

My code is as follows:

require ‘validation’  
require ‘date’  
require ‘time\_period’  
class Property \< ActiveRecord::Base  
…

Thanks.

---

<div class="post-metadata">

**Author:** ![lee](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/bc8723/32.png) [@lee](https://www.ruby-forum.com/u/lee)\
**Post date:** [January 26, 2007, 8:44pm UTC](https://www.ruby-forum.com/t/require-in-models/83512/2 "2007-01-26T20:44:52Z")

</div>

You should almost never need to require anything in your model; Rails  
includes a ton of libraries for you. Odd error though, not exactly sure  
what  
it means.

Jason

---

<div class="post-metadata">

**Author:** ![lee](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/bc8723/32.png) [@lee](https://www.ruby-forum.com/u/lee)\
**Post date:** [January 26, 2007, 8:58pm UTC](https://www.ruby-forum.com/t/require-in-models/83512/3 "2007-01-26T20:58:54Z")

</div>

It seems that a corrupt file (validation.rb) was causing the problem. I  
restored to an older version and the problem went away!

I think I need “require” statements for two reasons:

1. to make use of common code under /lib from within my model
2. to access other methods from within a model that “I” have defined in  
other model files

Is this good practice?

---

<div class="post-metadata">

**Author:** ![lee](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/bc8723/32.png) [@lee](https://www.ruby-forum.com/u/lee)\
**Post date:** [January 26, 2007, 9:07pm UTC](https://www.ruby-forum.com/t/require-in-models/83512/4 "2007-01-26T21:07:55Z")

</div>

So does Rails automatically load the files under /lib and make them  
visible within all model files? With the exception of the system  
date.rb, both validation.rb and time\_period.rb are in the /lib  
directory.

Also, if I were to define a method ‘x’ in my model ‘X’ and model ‘X’  
inherits from ActiveRecord, would the method ‘x’ automatically be  
visible to my code in another ActiveRecord model ‘Y’? If so, is this  
magic by Rails or ActiveRecord?

---

<div class="post-metadata">

**Author:** ![lee](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/bc8723/32.png) [@lee](https://www.ruby-forum.com/u/lee)\
**Post date:** [January 26, 2007, 9:00pm UTC](https://www.ruby-forum.com/t/require-in-models/83512/5 "2007-01-26T21:00:54Z")

</div>

You might be overwriting the Rails libraries with those require  
statements.  
Since the libraries you are referencing are already loaded up  
dynamically  
you need not require them.

If there were other libraries that needed to be loaded (ie - ones you  
wrote)  
you could do so in your environment.rb, then ‘include’ the libraries in  
the  
files you need to access them.

Keep in mind that require looks in the root directory of where the  
application is being run from to look for the files to import, that is  
why  
you see people using File.dirname( **FILE** ) to get the path to the  
current  
file instead of the app root.

M\<\>\<

---

<div class="post-metadata">

**Author:** ![lee](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/bc8723/32.png) [@lee](https://www.ruby-forum.com/u/lee)\
**Post date:** [January 26, 2007, 9:38pm UTC](https://www.ruby-forum.com/t/require-in-models/83512/6 "2007-01-26T21:38:01Z")

</div>

Class in /lib will be automatically require’d by Rails if they follow  
the  
following convention:

lib/class\_name.rb :  
class ClassName  
…  
end

The name of the file must be the underscore version of the name of the  
class. If the names differ, then you’ll have to require for yourself.

Jason
