web-dev-qa-db-fra.com

Comment puis-je déclarer une variable globale dans Ruby on Rails?

Comment puis-je déclarer une variable globale dans Ruby on Rails?

Mon exemple de code:

dans mon controller#application.rb:

def user_clicked()
  @current_userid = params[:user_id]
end

dans mon layout#application.html.haml J'ai une barre latérale avec ce lien:

= 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

dans mon views#view_user.html.haml:

%h2 @current_userid

Je veux déclarer une variable globale qui peut modifier mon contrôleur et l'utiliser n'importe où, comme contrôleur, vues, etc. Ce qui précède n'est qu'un exemple de scénario. Si je clique sur le lien John ou Doe, il enverra un user_id au contrôleur et lorsque je clique sur le lien "Afficher l'utilisateur cliqué", il affichera le dernier lien cliqué. C'est soit John=1 ou Doe=2.

Bien sûr, si je clique d'abord sur le lien "Afficher l'utilisateur cliqué", il affichera nil.

14
do_Ob

Dans Ruby les variables globales sont déclarées en préfixant l'identifiant avec $

$foo = 'bar'

Ce que vous voyez rarement utilisé pour n certain nombre de raisons . Et ce n'est pas vraiment ce que vous recherchez.

Dans Ruby sont déclarées avec @:

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

Rails transmet automatiquement les variables d'instance du contrôleur au contexte de la vue.

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

Devinez ce qu'il produit et je vous donnerai un cookie.

Dans votre exemple @global_variable est nul depuis controller#sample_1 n'est pas appelé - la demande passe par controller#sample_2.

def sample_2
  @global_variable = "Hello World"
end
22
max