Respostas:
title
é uma variável local. Eles só existem dentro do seu escopo (bloco atual)
@title
é uma variável de instância - e está disponível para todos os métodos dentro da classe
Você pode ler mais aqui: http://strugglingwithruby.blogspot.dk/2010/03/variables.html
No Ruby on Rails - declarar suas variáveis no seu controlador como variáveis de instância ( @title
) as torna disponíveis para sua visualização.
Use @title
em seus controladores quando quiser que sua variável esteja disponível em suas visualizações.
A explicação é que @title
é uma variável de instância e title
é uma variável local e os trilhos disponibilizam variáveis de instância de controladores para visualizações. Isso acontece porque o código do modelo (erb, haml, etc) é executado dentro do escopo da instância atual do controlador.
A diferença está no escopo da variável. A versão @ está disponível para todos os métodos da instância da classe.
A resposta curta, se você estiver no controlador e precisar disponibilizar a variável para a visualização, use @variable
.
Para uma resposta muito mais longa, tente o seguinte: http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_classes.html
@variable
s são chamados variáveis de instância em ruby. O que significa que você pode acessar essas variáveis em QUALQUER MÉTODO dentro da classe. [Em todos os métodos da classe]
Variáveis sem o @
símbolo são chamadas de variáveis locais, o que significa que você pode acessar essas variáveis locais somente dentro DO MÉTODO DECLARADO. Limitado ao escopo local.
Exemplo de variáveis de instância:
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
No exemplo acima @cust_id
, @cust_name
, @cust_addr
são acedidas num outro método dentro da classe. Mas a mesma coisa não seria acessível com variáveis locais.
Um tutorial sobre O que é escopo variável? apresenta alguns detalhes muito bem, basta incluir os relacionados aqui.
+------------------+----------------------+
| Name Begins With | Variable Scope |
+------------------+----------------------+
| $ | A global variable |
| @ | An instance variable |
| [a-z] or _ | A local variable |
| [A-Z] | A constant |
| @@ | A class variable |
+------------------+----------------------+
Uma variável local é acessível apenas dentro do bloco de inicialização. Além disso, uma variável local começa com uma letra minúscula (az) ou sublinhado (_).
E a variável de instância é uma instância self
e começa com uma @
variável Também uma instância pertence ao próprio objeto. Variáveis de instância são aquelas em que você executa métodos, por exemplo, .send
etc.
exemplo:
@user = User.all
A @user
é a variável de instância
E variáveis de instância não inicializadas têm um valor de Nil
@title
& title
?
@title
outitle
@ variáveis são variáveis de instância, sem são variáveis locais.
Leia mais em http://ruby.about.com/od/variables/a/Instance-Variables.htm