do_Ob
do_Ob

Reputation: 719

How can I declare a global variable in Ruby on Rails?

How can I declare a global variable in Ruby on Rails?

My sample code:

in my controller#application.rb:

def user_clicked()
  @current_userid = params[:user_id]
end

in my layout#application.html.haml I have sidebar with this link:

= link_to "John", user_clicked_path(:user_id => 1)
= link_to "Doe", user_clicked_path(:user_id => 2)
= link_to "View clicked user", view_user_path

in my views#view_user.html.haml:

%h2 @current_userid

I want to declare a global variable that can modify my controller and use it anywhere, like controller, views, and etc. The above is only a sample scenario. If I click the John or Doe link, it will send a user_id to the controller and when I click the "View clicked user" link, it will display the last clicked link. It is either John=1 or Doe=2.

Of course if I click the "View clicked user" link first, it will display nil.

Upvotes: 19

Views: 62954

Answers (1)

max
max

Reputation: 102423

In Ruby global variables are declared by prefixing the identifier with $

$foo = 'bar'

Which you rarely see used for a number of reasons. And it's not really what you are looking for.

In Ruby instance variables are declared with @:

class DemoController
  def index
    @some_variable = "dlroW olleH"
    @some_variable = backwards
  end
  private 
  def backwards
     @some_variable.reverse
  end
end

Rails automatically passes the controller's instance variables to the view context.

# /app/views/demos/index.html.haml
%h1= @some_variable 

Guess what it outputs and I'll give you a cookie.

In your example @global_variable is nil since controller#sample_1 is not called - the request would go through controller#sample_2.

def sample_2
  @global_variable = "Hello World"
end

Upvotes: 26

Related Questions