Problem setting variables in ApplicationController.

I'm dynamically generating menu options based on the currently logged
in user: current_user.
My menus are setup on the applicatin.rhtml file. The current_user is
defined in the application controller. But, attempting to assign it a
value while in the application controller results in an 'undefined
method' error.

ApplicationController ....

def current_user
   @cu = ::User.find(session[:rbac_user_id]) || "not logged in"
end

This should be

<% if @cu && @cu.has_role?("Admin") %>
  menu one
  menu two
<%end%>

That way it makes sure there is a user, then checks their role.

You need to use instance variables to get data to your views. You can't call a method in your controller from the view.
Call current_user in your function before the page is rendered.
I'm working on a role-based project right now also, so if you find a better way I'd like to hear about it.

Jason

Larry Kelly wrote:

Definitely, for whole pages that are role-based. But for conditionally displaying parts of a menu, what's the best route?
Putting an if directly in the view is what I've been doing, but it seems that there should be a more elegant approach.

Jason

Matthew Isleb wrote: