Many apps use app/views/layouts/application.html.erb as a layout that
applies to the website globally. If you do want separate layouts for
your two controllers, I would create a logout partial. You could do
it by making a file app/views/shared/_logout.html.erb that contains
your logout link. Then from your two other layouts you would have to
do: <%= render :partial => "shared/logout" %>
Regarding the controller, you would need to put the suggested
before_filter in the application.rb controller so that it runs for any
controller. I would expand the logic a little bit. Probably something
like this:
class ApplicationController
before_filter :find_current_user
def find_current_user
@current_user = User.find(session[:user_id]) if session[:user_id]
end
def logged_in?
!session[:user_id].nil?
end
helper_method :logged_in?
end
Then in your partial:
<% if logged_in? %>
<%= link_to "log out [EMAIL PROTECTED]", logout_path
<% end %>
For logout_path to be available, you'll need to be using named routes.
If you're not comfortable doing that in Rails yet, you could
use :controller => 'admin', :action => 'logout' like you originally
had.
-Dan Manges
http://www.dcmanges.com/blog
On Sep 20, 6:36 am, "Commander Johnson" <[EMAIL PROTECTED]>
wrote:
> Erol,
> Thanks for that snippet. This is what I made of it:
>
> def maintain_session
> if session[:user_id]
> @current_user = User.find(session[:user_id])
> end
> end
>
> Otherwise an error occurs before login.
>
> Ramon,
>
> I don't understand yet how this will apply to both the FormsController and
> ElementsController.
>
> On Sat, Sep 20, 2008 at 12:49 PM, Erol Fornoles <[EMAIL PROTECTED]>wrote:
>
>
>
> > On Sep 20, 5:09 pm, "Commander Johnson" <[EMAIL PROTECTED]>
> > wrote:
> > > Hi,
> > > When users are logged in, they should always have a 'Logout' function
> > handy
> > > somewhere.
>
> > > Users control Forms and Elements using two controllers, FormsController
> > and
> > > ElementsController.
>
> > > What at least works is to add the following lines to the end of both
> > layout
> > > files.
>
> > > views/layouts/elements.erb.html and
> > > views/layouts/forms.erb.html
>
> > > <hr />
> > > <%= link_to "Logout #{User.find(session[:user_id]).name}", :controller =>
> > > 'admin', :action => 'logout' %>
> > > </body>
> > > </html>
>
> > > This gives me two issues.
> > > - I'm putting business logic in the View.
> > > - I'm putting this line across two files.
>
> > > CmdJohnson
>
> > I agree with Ramon. Also, I suggest you put the following in your
> > application.rb:
>
> > before_filter :maintain_session
>
> > protected
>
> > def maintain_session
> > [EMAIL PROTECTED] = User.find(session[:user_id])
> > end
>
> > That way, you can do this on your layout:
>
> > <%= link_to "Logout [EMAIL PROTECTED]", :controller =>
> > 'admin', :action => 'logout' %>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Ruby
on Rails: Talk" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---