Подтвердить что ты не робот

Как объявить глобальную переменную в 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.

4b9b3361

Ответ 1

В Ruby глобальные переменные объявляются путем префикса идентификатора с помощью $

$foo = 'bar'

Что вы редко видите для нескольких причин. И это не совсем то, что вы ищете.

В 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 = "Helloword"
end