@ variables dans Ruby on Rails

Quelle est la différence entre @title et le title ? Puisque les deux peuvent être des noms de variables. Comment puis-je choisir le type de variable à utiliser? Avec @ ou pas?

title est une variable locale. Ils n’existent que dans son périmètre (bloc actuel)

@title est une variable d’instance – disponible pour toutes les méthodes de la classe.

Vous pouvez en lire plus ici: http://strugglingwithruby.blogspot.dk/2010/03/variables.html

Dans Ruby on Rails – la déclaration de vos variables dans votre contrôleur en tant que variables d’instance ( @title ) les rend disponibles à votre vue.

Utilisez @title dans vos contrôleurs lorsque vous souhaitez que votre variable soit disponible dans vos vues.

L’explication est que @title est une variable d’instance et title est une variable locale et rails permet de rendre les variables d’instance des contrôleurs disponibles pour les vues. Cela se produit car le code du modèle (erb, haml, etc.) est exécuté dans la scope de l’instance du contrôleur en cours.

La différence réside dans la scope de la variable. @Version est disponible pour toutes les méthodes de l’instance de classe.

La réponse courte, si vous êtes dans le contrôleur et que vous devez rendre la variable disponible pour la vue, utilisez @variable .

Pour une réponse beaucoup plus longue, essayez ceci: http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_classes.html

@variable sont appelées variables d’instance dans ruby. Ce qui signifie que vous pouvez accéder à ces variables dans TOUTE MÉTHODE dans la classe. [Dans toutes les méthodes de la classe]

Les variables sans le symbole @ sont appelées variables locales, ce qui signifie que vous ne pouvez accéder à ces variables locales que dans cette méthode déclarée. Limité à la scope locale.

Exemple de variables d’instance:

 class Customer def initialize(id, name, addr) @cust_id = id @cust_name = name @cust_addr = addr end def display_details puts "Customer id #{@cust_id}" puts "Customer name #{@cust_name}" puts "Customer address #{@cust_addr}" end end 

Dans l’exemple ci-dessus, @cust_id , @cust_name , @cust_addr sont accessibles dans une autre méthode de la classe. Mais la même chose ne serait pas accessible avec les variables locales.

Une variable locale n’est accessible qu’à partir du bloc de son initialisation. De plus, une variable locale commence par une lettre minuscule (az) ou un trait de soulignement (_).

Et la variable d’instance est une instance de self et commence par un @ Une variable d’instance appartient également à l’object lui-même. Les variables d’instance sont celles sur lesquelles vous effectuez des méthodes, par exemple .send etc.

Exemple:

 @user = User.all 

@user est la variable d’instance

Et les variables d’instance non initialisées ont une valeur de Nil

Les variables @ sont des variables d’instance, sans elles sont des variables locales.

En savoir plus sur http://ruby.about.com/od/variables/a/Instance-Variables.htm