如何在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=1
或Doe=2
。
当然,如果我点击"查看点击的用户"首先链接,它会显示nil
。
答案 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