Ruby on Rails - render layout
layout, render, ruby-on-rails
Solution
The method `render` will actually attempt to render content; you should not call it when all you want to do is set the layout.
Rails has a pattern for all of this baked in. Simply pass a symbol to `layout` and the method with that name will be called in order to determine the current layout:
class MyController < ApplicationController
layout :admin_layout
private
def admin_layout
# Check if logged in, because current_user could be nil.
if logged_in? and current_user.is_able_to('siteadmin')
"admin"
else
"application"
end
end
end
See details here.
Problem
I'm trying to split up a web site into two sections. One which should use the application layout and one that should use the admin layout. In my application.rb I created a function as follows: ``` def admin_layout if current_user.is_able_to('siteadmin') render :layout => 'admin' else render :layout => 'application' end end ``` And in the controllers where it might be one or the other I put ``` before_filter :admin_layout ``` This works fine for some pages (where its just text) but for others I get the classic error: ``` You have a nil object when you didn't expect it! You might have expected an instance of Array. The error occurred while evaluating nil.each ``` Does anyone have an idea of what I'm missing? How should I properly use render and layout?