On Wed, Dec 28, 2011 at 1:44 PM, Brynjolfur Thorvardsson <[email protected]>wrote:

> Hi, I’ve just run into a very annoying session problem and judging by my
> failure to find anything on Google it seems that nobody else has
> experienced this!****
>
> ** **
>
> I’m trying to set a session variable in application_controller.rb, using
> simply:****
>
> ** **
>
> @color = “grey”****
>
> session[:colors] = @color****
>
> ** **
>
> When trying to look at my site I get:****
>
> ** **
>
> undefined method `session' for ApplicationController:Class****
>
> ** **
>
> ** **
>
> I’ve used this before and from all the docs this is how I’m supposed to do
> it! The site was working fine until I tried using session.
> ApplicationController inherits from ActionController and according to the
> API documentation, the session stuff is in the actionpack gem which is
> installed on my system and shows up when I run “bundle install” and “bundle
> show actionpack”. I’ve also tried “gem update”.****
>
> ** **
>
> I’m using Rails 3.1.0, Gem 1.8.13, Ruby 1.9.2, running on Ubuntu 11.10****
>
> ** **
>
> $bundle show actionpack****
>
> > /usr/lib/ruby/gems/1.9.1/gems/actionpack-3.1.0****
>
> ** **
>
> I’ve tried this on two separate sites on the same box, one with Apache2
> and one with WEBbrick, even running it as root. The second site is a test
> site with no changes whatsoever made to startup or initialization files.
> I’ve checked access rights, chmodding everything to 775, restarting the
> whole system etc etc and I can’t work out why the blessed thing won’t work!
> ****
>
> ** **
>
> Does anybody have a clue what might be going on?
>

You are trying to call 'session' as a class method on the
ApplicationController class,
which fails, like this:

$ rails c
Loading development environment (Rails 3.1.3)
...
007:0> ApplicationController.session
NoMethodError: undefined method `session' for ApplicationController:Class
from (irb):7
from 
/home/peterv/.rvm/gems/ruby-1.9.3-p0@base_app/gems/railties-3.1.3/lib/rails/commands/console.rb:45:in
`start'
from 
/home/peterv/.rvm/gems/ruby-1.9.3-p0@base_app/gems/railties-3.1.3/lib/rails/commands/console.rb:8:in
`start'
from 
/home/peterv/.rvm/gems/ruby-1.9.3-p0@base_app/gems/railties-3.1.3/lib/rails/commands.rb:40:in
`<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'

The 'session' method is available on instances of the ApplicationController
class.

For a single action:

class HomeController < ApplicationController
  def index
    @color = 'grey'
    session[:colors] = @color
  end
end

If you wanted to set the color for each and every action, you could do this:

class ApplicationController < ActionController::Base

  def set_session_color
    @color = 'grey'
    session[:colors] = @color
  end

  before_filter :set_session_color
  protect_from_forgery
end

HTH,

Peter

-- 
Peter Vandenabeele
http://twitter.com/peter_v
http://rails.vandenabeele.com

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