How to use a variable in several controllers?

48 views
Skip to first unread message

António

unread,
Aug 29, 2014, 3:01:41 PM8/29/14
to rubyonra...@googlegroups.com

Dear all,

 

I am a new "Ruby/Ruby on Rails" programmer. I am not sure this is the correct forum for my question. If this is not the correct forum, please indicate me a more appropriate one.

 

 

When my application implements a URL, an array, @session, is used in several methods of a first controller. The application redirects to another page, making a second controller being invoked. This controller does not use the array. When the method of the second controller ends, a layout is implicitly rendered. The layout has the following code:

 

...

<body>

        <% if @session.length == 0 then %>

...

 

I got the following error message when trying to implement the URL: undefined method `length' for nil:NilClass.

 

What should I do in order to the array be recognized by the second controller?

 

Regards,

António.

Colin Law

unread,
Aug 29, 2014, 4:25:00 PM8/29/14
to rubyonra...@googlegroups.com
As a newcommer to rails I strongly suggest you work right through a
good tutorial such as railstutorial.org (which is free to use online).
That will show you the basics of rails.

As for your question are you trying to use the rails session variable?
If so then it is session, not @session. If it is a variable of your
own then you cannot directly pass it from one controller to another.
Each request to the webserver starts from a clean slate. Remember,
for example, the server could be shut down and restart between
requests. You must re-calculate your variable at each request. The
exception is the session variable that I mentioned which is passed,
normally, via cookies.

As I said work through a good tutorial before going any further.

Colin
Message has been deleted

Colin Law

unread,
Sep 4, 2014, 5:00:56 PM9/4/14
to rubyonra...@googlegroups.com
On 4 September 2014 21:38, António <ajd...@gmail.com> wrote:
> Hi Colin,
>
>
> Thanks for your answer,
>
>
>
> The variable @session is a variable I "created" to store the "user id" of a
> user when the user logs in.
>
>
>
> The second controller checks the variable for knowing whether a user is
> logged in. The idea is the @session variable to be a "global variable" of
> the application, that is, used by several controllers. According to your
> answer, it is not possible. Is that true?

Whilst technically it may be possible in some situations that is
certainly not the way to achieve the result you want. If it contains
data that can be recalculated then possibly use a before filter.
Alternatively the rails session variable may be the right way to go.

As I said, work right through a good tutorial and such things should
become clear, or at least less muddy.

Colin

Matt Jones

unread,
Sep 5, 2014, 8:16:51 AM9/5/14
to rubyonra...@googlegroups.com
Controllers and their instance variables are torn down after each request; setting @session in one won't have any effect on subsequent requests.

You may want to look into the built-in `session` helper, which uses signed cookies:


The Guides site overall will be very useful to you.

--Matt Jones
 

Jason Fleetwood-Boldt

unread,
Sep 5, 2014, 10:16:12 AM9/5/14
to rubyonra...@googlegroups.com
What you want to achieve is possible, but you are thinking about it the wrong way. Do not call it a "global variable" --- that is not only the wrong word but refers to some other concept in Ruby which will not do what you think it will do.

Here's a great introduction to sessions & cookies with a detailed beginner explanation:



when you're in a controller and you refer to session[:xyz] (see article above) that is not a local variable, but in fact a special construct by Rails to share information across web requests from the same user. It's already implemented for you -- use it, don't re-invent the wheel.

-Jason
Reply all
Reply to author
Forward
0 new messages