2015-05-19 106 views
11

如何在Ruby on Rails中聲明全局變量?如何在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

對不起,我不明白你的問題。 – Surya

+0

檢查[這](http://stackoverflow.com/questions/12112765/how-to-reference-global-variables-and-class-variables) – Abhi

+0

嗨...對不起,我的壞語法^ _ ^我編輯我的問題^ _ ^和示例場景。我想說的是我想要一個我可以在任何地方訪問的全局變量。就像上面的例子一樣,如果我點擊John或Doe鏈接,它會向控制器發送一個user_id,當我點擊「View clicked user」鏈接時,它會顯示最後點擊的鏈接,它是John = 1或者Doe = 2。當然,如果我先點擊「查看點擊用戶」鏈接,它將顯示爲零。^_ ^請幫忙^ _^ –

回答

19

在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 

滑軌自動將控制器的實例變量的視圖上下文。

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

猜猜它輸出什麼,我給你一個cookie。

在您的示例中,@global_variable爲零,因爲沒有調用controller#sample_1 - 請求將通過controller#sample_2

def sample_2 
    @global_variable = "Helloword" 
end 
+0

嗨...謝謝你的回覆^ _ ^我編輯了我上面的問題^ _ ^並更改了示例場景。我想說的是我想要一個我可以在任何地方訪問的全局變量。如果我點擊John或Doe鏈接,它會向控制器發送一個user_id,當我點擊「查看點擊用戶」鏈接時,它會顯示最後點擊的鏈接,它是John = 1或Doe = 2。當然,如果我先點擊「查看點擊用戶」鏈接,它將顯示爲零。對不起,我的壞語法^ _^ –

+0

我認爲你正在尋找的可能是會議http://guides.rubyonrails.org/action_controller_overview。html#session – max

+0

感謝這次會議^ _^...我試過了,我現在無處不在... session [:global_variable] –