Layouts in Rails 3.0

Hi,

I've just started my first Rails 3 stable app from scratch and still looking at all the changes. Most things are wonderful. However, I can't figure out what happened to the layout structure.

In my controller:

class ApplicationController < ActionController::Base   protect_from_forgery

  layout 'application' end

And in app/views/layouts/application.html.erb:

<html>   <head>     ...   </head>   <body>     ...     <%= yield %>     ...   </body> </html>

This is the way I did it in Rails 2.3.x. I can't find what's changed in Rails 3.0. All my actions are showing up without the layout.

Thanks.

Jaap Haagmans

Make sure you don't have two application.* files in the layouts directory. If for example you have:

layouts/application.html layouts/application.html.erb

It will render the .html.erb first.

Also, look at the log to see what they say. Did your old application.html.erb get renamed during the upgrade?

Anyway, hope this helps.

Hi James,

Thanks for your thinking with me.

I haven't upgraded from Rails 2.3.x, I've started a new Rails 3 application and edited the generated application.html.erb. I've also tried creating a new one called main.html.erb and pointing to that in my ApplicationController, but that didn't work as well.

The logs show nothing weird:

Started GET "/user_sessions/new" for 127.0.0.1 at Wed Sep 08 11:14:27 +0200 2010   SQL (0.4ms) SHOW TABLES   Processing by UserSessionsController#new as HTML Rendered user_sessions/new.html.erb (7.0ms) Completed 200 OK in 70ms (Views: 20.2ms | ActiveRecord: 0.4ms)

Thanks again.

Jaap Haagmans

Jaap Haagmans wrote:

In my controller:

class ApplicationController < ActionController::Base   protect_from_forgery

  layout 'application' end

Yank the

layout 'application'

statement and you should be fine. My out-of-the-generator Rails 3 app honors the application.html.erb without any such statement.

class ApplicationController < ActionController::Base   protect_from_forgery end

Hi Ar,

Thanks!

I added that statement because my layout wouldn't show. So with or without it, it makes no difference.

Regards, Jaap Haagmans