# Where to put views for application controller?

**URL:** <https://www.ruby-forum.com/t/where-to-put-views-for-application-controller/103232>\
**Category:** Rails\
**Created:** [May 3, 2007, 7:57am UTC](https://www.ruby-forum.com/t/where-to-put-views-for-application-controller/103232 "2007-05-03T07:57:56Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![casper\_the\_ghost](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/58956e/32.png) [@casper\_the\_ghost](https://www.ruby-forum.com/u/casper_the_ghost)\
**Post date:** [May 3, 2007, 7:57am UTC](https://www.ruby-forum.com/t/where-to-put-views-for-application-controller/103232/1 "2007-05-03T07:57:56Z")

</div>

hi,

im pretty much a rails newbie, but i was wondering where the rhtml  
files go for the application controller?

i.e. if i had some logic that needed to be performed on the document  
root of my website: (i.e. [http://www.mysite.com](http://www.mysite.com))  
where would i put this rhtml file.

I tried putting it in the public directory, but that failed…and the  
content inside the \<% %\> takes weren’t evaluated…

also, just entering [http://www.mysite.com](http://www.mysite.com) didn’t automatically render  
index.rhtml, but rather gave me a 404 error.

---

<div class="post-metadata">

**Author:** ![casper\_the\_ghost](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/58956e/32.png) [@casper\_the\_ghost](https://www.ruby-forum.com/u/casper_the_ghost)\
**Post date:** [May 3, 2007, 10:01am UTC](https://www.ruby-forum.com/t/where-to-put-views-for-application-controller/103232/2 "2007-05-03T10:01:26Z")

</div>

removed\_email\_address@domain.invalid wrote:

> hi,
> 
> im pretty much a rails newbie, but i was wondering where the rhtml  
> files go for the application controller?

The application controller is basicly a controller for all controllers  
(that’s what the top line says on most generated controllers:

class ExampleGeneratedController \< ApplicationController

this is used for hierarcial ruby reasons to overwrite actions/methods in  
“children” Controllers (instead of writing the same action for every  
controller, it can be put in the application controller, and Each  
subClass controller will have that method - it is very useful for  
authentication systems… )

BUT … onto your issue - if you wish to see the homepage root rhtml, it  
can be brought up in ANY controller - it’s all a matter of where you  
route the root of the site to:

the myapp/config/routes.rb file handles this - all you have to do is  
route ‘/’ to a controller and action, and the rhtml corresponding, will  
be the rhtml of the root site. so, for example (supposing you have these  
controllers and actions):

routes.rb

map.connect ‘/’, :controller =\> ‘posts’, :action =\> ‘list’

and then set up the rhtml in /app/view/posts/list to your liking. you  
could do this with any controller and any action - there is no  
limitation on this … you just have to set it up in the routes.rb  
file…

🙂

hope this helps out…

-shai

---

<div class="post-metadata">

**Author:** ![casper\_the\_ghost](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/58956e/32.png) [@casper\_the\_ghost](https://www.ruby-forum.com/u/casper_the_ghost)\
**Post date:** [May 3, 2007, 11:53am UTC](https://www.ruby-forum.com/t/where-to-put-views-for-application-controller/103232/3 "2007-05-03T11:53:35Z")

</div>

Hi

In your config directory is a routes.rb file which rails uses to  
understand  
which actions in your app to call in response to the url requested.

Here is what it looks like:

ActionController::Routing::Routes.draw do |map|

# The priority is based upon order of creation: first created →

highest  
priority.

# Sample of regular route:

# map.connect ‘products/:id’, :controller =\> ‘catalog’, :action =\>

‘view’

# Keep in mind you can assign values other than :controller and

:action

# Sample of named route:

# map.purchase ‘products/:id/purchase’, :controller =\> ‘catalog’,

:action  
=\> ‘purchase’

# This route can be invoked with purchase\_url(:id =\> product.id)

# You can have the root of your site routed by hooking up ‘’

# – just remember to delete public/index.html.

map.connect ‘’, :controller =\> “welcome”

# Allow downloading Web Service WSDL as a file with an extension

# instead of a file named 'wsdl

map.connect ‘:controller/service.wsdl’, :action =\> ‘wsdl’

# Install the default route as the lowest priority.

map.connect ‘:controller/:action/:id.:format’  
map.connect ‘:controller/:action/:id’  
end

As you can see the first uncommented line is  
map.connect ‘’, :controller =\> “welcome”

What this tells rails is that when the url is only [http://www.mysite.com](http://www.mysite.com)  
it  
should route that request to the welcome controller. If no action is  
specified rails will default to calling the index action in that  
controller.  
The index action will look for an index.rhtml, parse the \<% %\> into the  
appropriate html and deliver a html file to be served to the browser.

The last uncommented line which looks like this  
map.connect ‘:controller/:action/:id’

is the default decoding of urls. the routing expects a url that looks  
like  
this for example:  
[http://www.mysite.com/welcome/show/5](http://www.mysite.com/welcome/show/5)  
This route mapping “decodes” the url as  
:controller =\> ‘welcome’  
:action =\> ‘show’  
:id =\> 5

Hope this helps.

Ivor

---

<div class="post-metadata">

**Author:** ![casper\_the\_ghost](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/58956e/32.png) [@casper\_the\_ghost](https://www.ruby-forum.com/u/casper_the_ghost)\
**Post date:** [May 3, 2007, 7:05pm UTC](https://www.ruby-forum.com/t/where-to-put-views-for-application-controller/103232/4 "2007-05-03T19:05:08Z")

</div>

thanks to both of you…thats clears things up a lot, i will start  
playing with it first chance i get.

To delve a bit deeper about the structure of a rails app, is it bad  
design to have only an application.rb controller? and so other  
controllers.

Let me explain a bit more, basically, the site i am working on has a  
lot of cgi script (thats the main chunk of the features this site  
promotes), and I have the task of adding user accounts to this site  
for a small additional feature. basically, at this point in time, it  
seems like this will be the only feature rails will be in charge  
of…so i am left wondering whats the point of putting all of my  
logic in an AccountController, and having an empty  
Application.rb…maybe it would make the most sense to just have  
everything inside the application controller, and shorten my urls at  
the same time (i.e. [http://www.mysite.com/login](http://www.mysite.com/login) vs.  
[http://www.mysite.com/account/login](http://www.mysite.com/account/login)).

This first hit me when i was adding the rails code to existing html  
pages, i found that i needed to add a ‘…/’ before the images  
directory in all of my ![]() tags because of the fact that i was up a  
level (i.e. in the account controller)
