Tengo un sistema de plantillas bastante antiguo escrito encima de ERB. Se basa en plantillas ERB almacenadas en la base de datos. Esos son leídos y renderizados. Cuando quiero pasar datos de una plantilla a otra utilizo el parámetro: locals al método de renderización de rieles. Para establecer las variables predeterminadas de esas variables en algunas plantillas, ¿utilizo el definido? método que simplemente me dice que si la variable local se ha definido y si no me inicializarlo con el valor por defecto de esta manera:definido? método en Ruby and Rails
unless defined?(perex)
perex = true
end
Estoy actualizando la aplicación a los últimos rieles y veo un comportamiento extraño. Básicamente, esto a veces funciona (a veces, Perex no está definido) y, a veces, no (Perex se define y establece en cero). Esto sucede sin cambiar nada más.
Tengo dos preguntas: ¿Hay alguna otra manera mejor que usar el definido? que no es confiable (fue confiable durante varios años en Rails 1.6 superior)? Tal forma no debería resultar en que vuelva a escribir todas las plantillas. He estado revisando los documentos de Ruby y no he podido encontrar nada sobre los definidos. método. ¿Fue obsoleto o simplemente estoy ciego?
Editar: El problema real fue causado por lo que parece ser un error de Ruby/eRB. A veces, el a menos que la declaración funcione, pero a veces no. Lo raro es que, incluso si se ejecutó la segunda línea , perex, stil permaneció nula para el resto del mundo. ¿Eliminar definido? resuelto eso.
Esto no es cierto. perex || = true hace lo mismo que perex = perex || true que establece el valor de "perex" en "true" si está indefinido, nulo o falso. El último caso rompería todo. – Honza