rails controller variable scope from action to action

40 views
Skip to first unread message

Sai Ch

unread,
Mar 17, 2016, 10:45:23 PM3/17/16
to rubyonra...@googlegroups.com
#rails #ruby #controller variable scope

class UsersController < ActionController
def create
@val1 = "hello"
@val2 = "end"
end

def method1
puts @val1
end

def method2
puts "how can i access other controller action instance variable here"
puts "without using model class instance"

puts @val2
end

end

--
Posted via http://www.ruby-forum.com/.

Sai Ch

unread,
Mar 17, 2016, 10:46:27 PM3/17/16
to rubyonra...@googlegroups.com
I am using global variables to store those 2 values wen I call 2nd
action after I call 1st action those are set to nil.

Colin Law

unread,
Mar 18, 2016, 8:16:26 AM3/18/16
to Ruby on Rails: Talk
On 17 March 2016 at 22:44, Sai Ch <li...@ruby-forum.com> wrote:
> #rails #ruby #controller variable scope
>
> class UsersController < ActionController
> def create
> @val1 = "hello"
> @val2 = "end"
> end
>
> def method1
> puts @val1
> end
>
> def method2
> puts "how can i access other controller action instance variable here"
> puts "without using model class instance"
>
> puts @val2

You can't access instance variables setup in a previously called
action as the controller object is re-constructed for each request.
It is possible that the server shut down due to innactivity in the
intervening time, or the requests could even be handled in different
instances of the server (in production there may be multiple instances
running). One way to solve this is to use a before filter to
initialise the variables.

Colin

Colin Law

unread,
Mar 18, 2016, 8:18:14 AM3/18/16
to Ruby on Rails: Talk
On 17 March 2016 at 22:46, Sai Ch <li...@ruby-forum.com> wrote:
> I am using global variables to store those 2 values wen I call 2nd
> action after I call 1st action those are set to nil.

Even if you worked out why that was happening it is not safe, as I
mentioned in my previous post there may be multiple instances of the
server running in production so this would not work.

Colin
Reply all
Reply to author
Forward
0 new messages