Ответы:
title
является локальной переменной. Они существуют только в пределах своей области (текущий блок)
@title
является переменной экземпляра и доступна всем методам в классе.
Вы можете прочитать больше здесь: http://strugglingwithruby.blogspot.dk/2010/03/variables.html
В Ruby on Rails - объявление ваших переменных в контроллере как переменных экземпляра ( @title
) делает их доступными для вашего просмотра.
Используйте @title
в своих контроллерах, когда вы хотите, чтобы ваша переменная была доступна в ваших представлениях.
Объяснение заключается в том, что @title
это переменная экземпляра и title
локальная переменная, а rails делает переменные экземпляра из контроллеров доступными для представлений. Это происходит потому, что код шаблона (erb, haml и т. Д.) Выполняется в рамках текущего экземпляра контроллера.
Разница заключается в области действия переменной. @Version доступна для всех методов экземпляра класса.
Краткий ответ: если вы находитесь в контроллере и вам нужно сделать переменную доступной для представления, используйте @variable
.
Для более длинного ответа попробуйте это: http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_classes.html
@variable
s называются переменными экземпляра в ruby. Это означает, что вы можете получить доступ к этим переменным в любом методе внутри класса. [По всем методам в классе]
Переменные без @
символа называются локальными переменными, что означает, что вы можете получить доступ к этим локальным переменным только в рамках ЗАЯВЛЕННОГО МЕТОДА. Ограничено местным охватом.
Пример переменных экземпляра:
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