On Fri, Dec 23, 2011 at 2:41 PM, Michael Pavling <[email protected]> wrote:

> On 23 December 2011 07:19, Gomzi Pai <[email protected]> wrote:
> > In rails session data is accessible only in controller. And thats how its
> > meant to be according to MVC.
>
> Really... based on the evidence of all the crappy apps I keep
> inheriting, that's not correct. The session is perfectly accessible
> from the views (although you're right - it *should* be avoided)
>
> > If you really need it in view you need to set an instance variable in
> > controller and use it in view.
>
> If you look again at the code in the OP, you'll see it's trying to be
> accessed as an instance variable - which almost certainly hasn't been
> set.
> If the OP wants to just change :
>  @session['user'].first_name
> to
>  session['user'].first_name
>
> ...it may miraculously start working.
>
> Two things...
>
> a) Please don't store whole objects in session. It's really stinky.
> Store the id, and reload it with each request.
> b) Rather than the repetition of accessing session["user"] attributes
> everywhere. Set a helper method in the application controller which
> returns the current user (or use an authentication Gem that does it
> for you)
> Something like:
>  def current_user
>     @current_user ||= User.find(session[:user_id])
>  end
>
> Then set up methods in your user class to manage permissions (to make
> them easier to manage).
>  # user.rb
>  def has_admin_rights?
>    first_name == "admin"
>  end
>
>  # view
>  <%if current_user.has_admin_rights? %>
>             <table width="290" border="0" height="20" align="right"
> cellspacing="0" cellpadding="0">
>
> ...see how it makes the code in the view more "self documenting"...
>
> Also, look at abstracting things like roles (admin, user, guest, etc)
> and statuses (awaiting_validation, active, retired) to state machines
> rather than "magic-number" text comparisons on first-name fields :-/
>
> HTH
>
> --
> 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.
>
>
thanks Michael for responding,my question is how that http session is set
in ruby on rail ?
because in following code '@session' is coming nil :

 <%if @session != nil%>
     <table width="250" border="0" height="20" align="right"
cellspacing="0" cellpadding="0">
  <%else%>
      <%if @session['user'].first_name == "admin"%>
          <table width="290" border="0" height="20" align="right"
cellspacing="0" cellpadding="0">
       <%end%>
  <%end%>

-- 
Thanks and Regards
  Sachin S. Kewale

-- 
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.

Reply via email to