Es una cuestión de scope. Una variable local solo es visible/utilizable en el método en el que está definida (es decir, desaparece cuando vuelve el método).
Por otra parte, una variable de instancia es visible en cualquier otro lugar en la instancia de la clase en la que se ha definido (esto es diferente de una variable de clase, que se comparte entre todas las instancias de una clase). Tenga en cuenta, sin embargo, que cuando define la variable de instancia es importante. Si se define una variable de instancia en un método, pero intenta utilizarlo en otro método antes de llamar a la primera, la variable de instancia tendrá un valor igual a cero:
def method_one
@var = "a variable"
puts @var
end
def method_two
puts @var
end
@var tendrá un valor diferente dependiendo de cuando se llama a cada método:
method_two() # Prints nil, because @var has not had its value set yet
method_one() # Prints "a variable", because @var is assigned a value in method_one
method_two() # Prints "a variable" now, because we have already called method_one
tengo una explicación sobre esto aquí: http://stackoverflow.com/questions/11523547/rails-and-class-variables/11523632#11523632 – Frost
Google él. Lo digo en serio. – vise