Render layout not working for application.xml.builder


#1

I have layouts/application.xml.builder which is rendered for all xml
reponses.
In controllers I have:

format.xml { render :layout => true, :xml => @some_var }

This works perfectly fine in rails 2.1.2 and stopped working after
upgrading
to 2.2.2.
It appears that :layout => true is not taking any effect. The
@some_var.to_xml is rendered just not with
application.xl.builder any more. I googled around and tried a bunch of
different approaches but
stuck. Anyone seen something like this?

Thanks,


Zhao


#2

Haven’t seen something like this but have you tried :layout =>
‘application’?


#3

Heinz,

Yes I have. I wrote a tiny app to illustrate my problem.

I have one model - user.rb:
class User < ActiveRecord::Base
def name
“foo”
end
end

and users_controller.rb:
class UsersController < ApplicationController
def index
respond_to do |format|
format.html
format.xml do
render :xml => User.new, :layout => ‘application’
end
end
end
end

I defined routes for it: map.resources :users

Then I change this to vary rails’ versions for testing:
RAILS_GEM_VERSION = ‘2.2.2’ unless defined? RAILS_GEM_VERSION

Using :layout => ‘application’ or not doesn’t matter. When I hit
http://localhost:3000/users.xml
I get this output:

Processing UsersController#index to xml (for 127.0.0.1 at 2009-03-16
17:41:10) [GET]
[4;36;1mSQL (0.3ms) [0;1mSET SQL_AUTO_IS_NULL=0
[4;35;1mUser Columns (1.5ms) SHOW FIELDS FROM users
Rendering template within layouts/application
Completed in 34ms (View: 6, DB: 2) | 200 OK [http://localhost/
users.xml]

As you can see, it is renderin layouts/application.

I have defined views/layouts/application.xml.builder as such:
xml.instruct!

xml.response do
xml << yield
end

And what I get is:

What I expect to get is xml instruct on top,
then a response node, with user inside.

Any more insight will be greatly appreciated.

Zhao

On Mar 4, 5:30 am, Heinz S. removed_email_address@domain.invalid