So I am working on a small project to exercise my new Rails brain muscles. And just as I start to feel good, I run into a problem.
In rails you can very easily define a layout. This layout - if named after a controller - makes all views of that controller invoke the layout.
Only if the layout has “yield” in it will you see the actual view you wanted.
The exact syntax is :
<%= yield :layout %>
Well, I wrote a controller “manager” with a layout.
Now, I want to make that layout over all the application.
This means - if I invoke an action of another controller, I want the layout to remain the same. This is a reasonable demand, and is actually explained in the book.
What you need to do is write
in my case it will be
in the ApplicationController. But it didn’t work!
My new controller was a scaffold. A scaffold has an auto-generated layout.
So if my scaffold is “project”, I will have “project.html.erb” in the layouts folder.
It seems that as long you don’t delete the controller’s layout, it will not use the manually defined layout.
In my case - Rails will keep using “project.html.erb” and not “manager.html.erb” even though I defined
. Once I deleted the project.html.erb, everything worked fine.