# Define classes for use in views

**URL:** <https://www.ruby-forum.com/t/define-classes-for-use-in-views/132634>\
**Category:** Rails\
**Created:** [March 22, 2008, 9:13am UTC](https://www.ruby-forum.com/t/define-classes-for-use-in-views/132634 "2008-03-22T09:13:27Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![apramanik](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/e9a140/32.png) [@apramanik](https://www.ruby-forum.com/u/apramanik)\
**Post date:** [March 22, 2008, 9:13am UTC](https://www.ruby-forum.com/t/define-classes-for-use-in-views/132634/1 "2008-03-22T09:13:27Z")

</div>

Hi all,

I want to define some simple classes that can be created and passed  
around in views. I’m currently using hashes, but I want to use a class  
so I can assign default values. Is this possible? Where would I define  
these classes? Thanks!

Abhik

---

<div class="post-metadata">

**Author:** ![apramanik](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/e9a140/32.png) [@apramanik](https://www.ruby-forum.com/u/apramanik)\
**Post date:** [March 22, 2008, 1:45pm UTC](https://www.ruby-forum.com/t/define-classes-for-use-in-views/132634/2 "2008-03-22T13:45:01Z")

</div>

apramanik wrote:

> I want to define some simple classes that can be created and passed  
> around in views. I’m currently using hashes, but I want to use a class  
> so I can assign default values. Is this possible? Where would I define  
> these classes? Thanks!

Your application’s “lib” directory will be in the Ruby load path and by  
default, when Rails comes across something starting with a capital  
letter it will “require” a file of the lower cased name (with words  
separated by underscores). This all means that, if you place a class  
MyClass in the file lib/my\_class.rb then it will automatically be loaded  
when it is needed. This is the usual place to put classes which are not  
ActiveRecord models. You can then access this class from any model,  
view or controller code.

---

<div class="post-metadata">

**Author:** ![apramanik](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/e9a140/32.png) [@apramanik](https://www.ruby-forum.com/u/apramanik)\
**Post date:** [March 22, 2008, 4:51pm UTC](https://www.ruby-forum.com/t/define-classes-for-use-in-views/132634/3 "2008-03-22T16:51:07Z")

</div>

Ah ok. That worked. I had put my file in a folder under ‘lib’. Is  
there a way to keep it in a subdirectory of ‘lib’ and require it  
elsewhere?

Abhik

On Mar 22, 5:45 am, Mark B. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

---

<div class="post-metadata">

**Author:** ![apramanik](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/e9a140/32.png) [@apramanik](https://www.ruby-forum.com/u/apramanik)\
**Post date:** [March 22, 2008, 5:02pm UTC](https://www.ruby-forum.com/t/define-classes-for-use-in-views/132634/4 "2008-03-22T17:02:20Z")

</div>

apramanik wrote:

> Ah ok. That worked. I had put my file in a folder under ‘lib’. Is  
> there a way to keep it in a subdirectory of ‘lib’ and require it  
> elsewhere?

Yes. Rails relates subdirectories to namespaces. For example, you  
could have the class Admin::Something in the file lib/admin/something.rb  
and Rails will find it automatically.

If you want to put classes into subdirectories without namespaces then  
you need to tell Rails where to find the class definitions using  
“require”.

---

<div class="post-metadata">

**Author:** ![apramanik](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/e9a140/32.png) [@apramanik](https://www.ruby-forum.com/u/apramanik)\
**Post date:** [March 22, 2008, 5:27pm UTC](https://www.ruby-forum.com/t/define-classes-for-use-in-views/132634/5 "2008-03-22T17:27:31Z")

</div>

apramanik wrote:

> Great that worked also. I also tried out doing a require in the erb,  
> didn’t work.

No, you’ll have to load it in elsewhere, such as your  
config/environment.rb file.

---

<div class="post-metadata">

**Author:** ![apramanik](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/e9a140/32.png) [@apramanik](https://www.ruby-forum.com/u/apramanik)\
**Post date:** [March 22, 2008, 5:18pm UTC](https://www.ruby-forum.com/t/define-classes-for-use-in-views/132634/6 "2008-03-22T17:18:07Z")

</div>

Great that worked also. I also tried out doing a require in the erb,  
didn’t work.

On Mar 22, 9:02 am, Mark B. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

---

<div class="post-metadata">

**Author:** ![apramanik](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/e9a140/32.png) [@apramanik](https://www.ruby-forum.com/u/apramanik)\
**Post date:** [March 22, 2008, 5:30pm UTC](https://www.ruby-forum.com/t/define-classes-for-use-in-views/132634/7 "2008-03-22T17:30:36Z")

</div>

Ok great thanks for all your help!

On Mar 22, 9:27 am, Mark B. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)
