2009-12-22 21 views
6

Parece que establecer múltiples variables de instancia en la acción (método) de un controlador causa problemas en la plantilla, solo la primera variable de instancia pasó a la plantilla. ¿Hay alguna forma de pasar múltiples variables a la plantilla? ¡Gracias! ¿Y por qué, en la perspectiva de Ruby, la plantilla obtiene acceso a las variables de instancia en una acción?¿Cómo pasar parámetros de un controlador a una plantilla?

Respuesta

4

Es posible que también desee buscar en la opción: locales de renderizado. Que acepta un hash tal que las claves son símbolos que se asignan a nombres de variables locales en su plantilla, y los valores son los valores para establecer esas variables locales.

Ejemplo:

render "show", :locals => {:user => User.first, :some_other_variable => "Value"} 

y esta plantilla

User ID: <%= user.id %><br> 
Some Other Variable: <%=some_other_variable%> 

producirán:

User ID: 1<br> 
Some Other Variable: Value 

Cuando se está reutilizando parciales a través de múltiples controladores. Establecer variables locales con la opción: locals es más simple y mucho más DRY que usar variables de instancia.

4

no debería tener ningún problema para configurar múltiples variables de instancia. Por ejemplo:

class CarsController < ApplicationController 
    def show 
    @car = Car.find(:first) 

    @category = Category.find(:first) 
    end 
end 

le permitirá acceder a ambos @car y @Category en los coches/show.html.erb

La razón por la que esto funciona es nada inherente a rubí, pero un poco de magia incorporada en los rieles. Rails automáticamente hace que cualquier variable de instancia establecida en una acción de controlador esté disponible para la vista correspondiente.

Cuestiones relacionadas