Відповіді:
title- локальна змінна. Вони існують лише в межах її сфери (поточний блок)
@title є змінною екземпляра - і доступна для всіх методів у класі.
Більше ви можете прочитати тут: http://strugglewithruby.blogspot.dk/2010/03/variables.html
У Ruby on Rails - оголошення ваших змінних у контролері як змінні екземпляра ( @title) робить їх доступними для вашого перегляду.
Використовуйте @titleу своїх контролерах, коли ви хочете, щоб ваша змінна була доступна у ваших представленнях.
Пояснення полягає в тому, що @titleце змінна інстанція і titleє локальною змінною, і рейли надають змінні екземпляри від контролерів доступними для представлення. Це відбувається тому, що код шаблону (erb, haml тощо) виконується в межах поточного екземпляра контролера.
Різниця полягає в області застосування змінної. @Version доступний для всіх методів екземпляра класу.
Коротка відповідь, якщо ви перебуваєте в контролері і вам потрібно зробити змінну доступною для перегляду, тоді використовуйте @variable.
Щоб отримати набагато довший відповідь, спробуйте це: http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_classes.html
@variables називаються змінними екземпляра в рубіні. Це означає, що ви можете отримати доступ до цих змінних у будь-якому способі всередині класу. [На всіх методах у класі]
Змінні без @символу називаються локальними змінними, а це означає, що ви можете отримати доступ до цих локальних змінних лише в межах ЦЕ ДЕКЛАРОВАНОГО МЕТОДУ. Обмежено місцевим масштабом.
Приклад змінних екземплярів:
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
У наведеному вище прикладі @cust_id, @cust_name, @cust_addrдоступні в іншому методі в класі. Але те ж саме не було б доступним для локальних змінних.
Підручник про те, що таке змінна область застосування? представляє деякі деталі досить добре, просто додайте тут пов'язані.
+------------------+----------------------+
| Name Begins With | Variable Scope |
+------------------+----------------------+
| $ | A global variable |
| @ | An instance variable |
| [a-z] or _ | A local variable |
| [A-Z] | A constant |
| @@ | A class variable |
+------------------+----------------------+
Локальна змінна доступна лише з блоку її ініціалізації. Також локальна змінна починається з малої літери (az) або підкреслення (_).
І змінна інстанція є екземпляром selfі починається з @також змінної екземпляра належить самому об'єкту. Змінні інстанції - це ті, які ви виконуєте методами, тобто .sendтощо
приклад:
@user = User.all
@userЄ змінною екземпляра
І неініціалізовані змінні екземпляра мають значення Nil
@title& title?
@titleабоtitle
@ змінні - це екземплярні змінні, без - локальні змінні.
Детальніше читайте на http://ruby.about.com/od/variables/a/Instance-Variables.htm