2012-04-03 14 views
7

Quiero pasar una variable local que contiene el origen para entrar en una página específica, esta variable contiene solo un símbolo con el valor.Render @object y locals vs render: parcial

Cuando utilizo este código funciona perfecto, la variable de origen es accesible en el parcial:

render :partial => "products", :collection => @products, :locals => {:origin => :gallery} 

Pero cuando se utiliza este código, el origen no está establecido y no son accesibles en el parcial:

render @products, :locals => {:origin => :gallery} 

¿Cuál es la diferencia aquí? ¿La segunda línea de código no representa el parcial como la primera línea?

+0

¿No debería ser ': los locales => {: origen => : galería} '? – Nick

+0

@Nick de hecho, esto era un error tipográfico, en mi aplicación uso el: locals => {: origin =>: gallery}, así que ese no era el problema. ¡Pero buena captura! :) – SteenhouwerD

Respuesta

8
<%= render @products %> 

es de hecho la sintaxis abreviada para la prestación de un parcial. Pero con la sintaxis abreviada, Rails ignorará la variable ": locales". Hay más sobre esto en el Rails Guides.

Así que si quiere pasar opciones adicionales al render, debe especificar ": partial => ...". Si desea saber por qué sucede esto, puede echar un vistazo a los Rails source.

+0

puede pasar una variable local al final de '@ products' me funciona. –

1

Hay una buena explicación aquí: Rails: confused about syntax for passing locals to partials

La versión corta es que sólo se puede omitir :locals en el segundo ejemplo:

render @products, :origin => :gallery 
+0

Definitivamente no funciona para mí (Rails 3.2.13). El enlace a la otra pregunta es útil. Pero creo que su ejemplo es incorrecto porque está tratando de usar el atajo de colección, que desafortunadamente no le permite pasar a los locales. Probablemente estés pensando en "render" product ",: origin =>: gallery' – Arcolye