2015-05-19 5 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=1, либо Doe=2.

Конечно, если я сначала нажму ссылку «Просмотр щелкнутого пользователя», он отобразит nil.

+1

Извините, я не понял ваш вопрос. – Surya

+0

Check [This] (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. И это не совсем то, что вы ищете.

В переменных экземпляра Рубиновых объявляются с @:

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 

Угадайте, что он выводит, и я дам вам куки.

В вашем примере @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] –

Смежные вопросы