如何在Ruby on Rails中声明一个全局变量?

时间:2015-05-19 09:30:58

标签: ruby-on-rails ruby

如何在Ruby on Rails中声明一个全局变量?

我的示例代码:

controller#application.rb

def user_clicked()
  @current_userid = params[:user_id]
end
我的layout#application.html.haml中的

我有这个链接的侧边栏:

= 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

views#view_user.html.haml

%h2 @current_userid

我想声明一个全局变量,可以修改我的控制器并在任何地方使用它,如控制器,视图等。以上只是一个示例场景。如果我单击John或Doe链接,它将向控制器发送user_id,当我单击"查看单击用户"链接,它将显示最后点击的链接。它可以是John=1Doe=2

当然,如果我点击"查看点击的用户"首先链接,它会显示nil

1 个答案:

答案 0 :(得分:22)

在Ruby中,全局变量通过在标识符前加$

来声明
$foo = 'bar'

您很少看到用于a number of reasons的内容。而且它并不是你想要的。

在Ruby实例变量中使用@声明:

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

Rails会自动将控制器的实例变量传递给视图上下文。

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

猜猜它输出了什么,我会给你一个cookie。

在您的示例中@global_variable为零,因为controller#sample_1未被调用 - 请求将通过controller#sample_2

def sample_2
  @global_variable = "Hello World"
end