@ variables en Ruby on Rails


¿Cuál es la diferencia entre @title y title? Dado que ambos pueden ser nombres de variables. Además, ¿cómo decido qué tipo de variable debo usar? Con @ o no?

Author: mkobit, 2013-01-14

6 answers

title es una variable local. Solo existen dentro de su ámbito (bloque actual)

@title es una variable de instancia y está disponible para todos los métodos de la clase.

Puedes leer más aquí: http://strugglingwithruby.blogspot.dk/2010/03/variables.html

En Ruby on Rails - declarar sus variables en su controlador como variables de instancia (@title) las pone a disposición de su vista.

 323
Author: Peter Rasmussen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-01 10:58:38

Use @title en sus controladores cuando desee que su variable esté disponible en sus vistas.

La explicación es que @title es una variable de instancia y title es una variable local y rails hace que las variables de instancia de los controladores estén disponibles para las vistas. Esto sucede porque el código de la plantilla (erb, haml, etc.) se ejecuta dentro del ámbito de la instancia del controlador actual.

 26
Author: joscas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-14 13:52:49

La diferencia está en el alcance de la variable. La @version está disponible para todos los métodos de la instancia de clase.

La respuesta corta, si está en el controlador y necesita hacer que la variable esté disponible para la vista, use @variable.

Para una respuesta mucho más larga prueba esto: http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_classes.html

 25
Author: GSP,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-14 13:33:59

@variables se llaman variables de instancia en ruby. Lo que significa que puede acceder a estas variables en CUALQUIER MÉTODO dentro de la clase. [En todos los métodos de la clase]

Las variables

Sin el símbolo @ se llaman variables locales, lo que significa que solo puede acceder a estas variables locales dentro del MÉTODO DECLARADO. Limitado al ámbito local.

Ejemplo de Variables de instancia:

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

En el ejemplo anterior @cust_id, @cust_name, @cust_addr se accede en otro método dentro de la clase. Pero lo mismo no sería accesible con variables locales.

 13
Author: Prabhakar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-02 12:06:25

Una variable local solo es accesible desde dentro del bloque de su inicialización. También una variable local comienza con una letra minúscula (a-z) o subrayado (_).

Y la variable de instancia es una instancia de self y comienza con @ También una variable de instancia pertenece al objeto en sí. Las variables de instancia son aquellas en las que realiza métodos, es decir, .send etc

Ejemplo:

@user = User.all

El @user es la variable de instancia

E instancia No inicializada las variables tienen un valor de Nil

 4
Author: Joe Hilton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-12-09 09:33:06

@ las variables son variables de instancia, sin son variables locales.

Lea más en http://ruby.about.com/od/variables/a/Instance-Variables.htm

 1
Author: John Beynon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-14 13:33:09