@ variabili in Ruby on Rails

Qual è la differenza tra @title e il title ? Poiché entrambi possono essere nomi variabili. Inoltre, come posso decidere quale tipo di variabile dovrei usare? Con @ o no?

title è una variabile locale. Esiste solo all’interno del suo ambito (blocco corrente)

@title è una variabile di istanza ed è disponibile per tutti i metodi all’interno della class.

Puoi leggere di più qui: http://strugglingwithruby.blogspot.dk/2010/03/variables.html

In Ruby on Rails – dichiarare le variabili nel controller come variabili di istanza ( @title ) le rende disponibili per la visualizzazione.

Usa @title nei tuoi controller quando vuoi che la tua variabile sia disponibile nelle tue visualizzazioni.

La spiegazione è che @title è una variabile di istanza e title è una variabile locale e rails rende variabili di istanza dai controller disponibili alle viste. Ciò accade perché il codice template (erb, haml, ecc.) Viene eseguito nell’ambito dell’istanza corrente del controller.

La differenza è nell’ambito della variabile. La @version è disponibile per tutti i metodi dell’istanza di class.

La risposta breve, se sei nel controller e devi rendere la variabile disponibile per la vista, usa @variable .

Per una risposta molto più lunga prova questo: http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_classs.html

@variable sono chiamate variabili d’istanza in ruby. Ciò significa che puoi accedere a queste variabili in QUALSIASI METODO all’interno della class. [Attraverso tutti i metodi della class]

Le variabili prive del simbolo @ sono chiamate variabili locali, il che significa che è ansible accedere a queste variabili locali solo all’interno di QUESTO METODO DICHIARATO. Limitato all’ambito locale.

Esempio di variabili di istanza:

 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 

Nell’esempio sopra @cust_id , @cust_name , @cust_addr sono accessibili in un altro metodo all’interno della class. Ma la stessa cosa non sarebbe accessibile con le variabili locali.

Una variabile locale è accessibile solo dal blocco della sua inizializzazione. Anche una variabile locale inizia con una lettera minuscola (az) o underscore (_).

E la variabile di istanza è un’istanza di self e inizia con una @ Anche una variabile di istanza appartiene all’object stesso. Le variabili di istanza sono quelle su cui si eseguono i metodi, ad esempio. .send ecc

esempio:

 @user = User.all 

@user è la variabile di istanza

E le variabili di istanza non inizializzate hanno un valore pari a Nil

Le variabili @ sono variabili di istanza, senza le variabili locali.

Maggiori informazioni su http://ruby.about.com/od/variables/a/Instance-Variables.htm