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