Entender la "magia" de Rails en lo que respecta a renderizar parciales (y pasar locales a ellos).
¿Por qué funciona esto?
<%= render "rabbits/form" %>
Y este trabajo:
<%= render "rabbits/form", :parent => @warren, :flash => flash %>
pero esto no funciona:
<%= render "rabbits/form", :locals => { :parent => @warren, :flash => flash } %>
Pero esto hace:
<%= render :partial =>"rabbits/form", :locals => { :parent => @warren, :flash => flash } %>
Además, ¿cómo puedo buscar estos matices para no tener que molestar a la gente con SO?
ruby-on-rails
partial-views
Meltemi
fuente
fuente
Respuestas:
La respuesta corta es que el método de representación mira el primer argumento que pasa. Si pasa un hash (que incluye
:partial => 'foo', :locals => {blah blah blah}
), pasará todos sus argumentos como un hash y los analizará en consecuencia.Si pasa una cadena como su primer argumento, se supone que el primer argumento es su nombre parcial y pasará el resto como sus locales. Sin embargo, en esa llamada posterior, en realidad asigna
:locals => your_locals_argument
, que en este caso es todo:locals => {locals hash}
, en lugar de solo{locals hash}
; es decir, terminas con:locals => {:locals => {locals hash}}
, en lugar de:locals => {locals hash}
.Así que mi consejo es que siempre pase valores explícitamente de la misma manera todo el tiempo, y no tendrá problemas. Para aprender sobre esto, fui directamente al código en sí ( actionpack / lib / base.rb ,
render()
método en Rails 2; Rails 3 es diferente). Es un buen ejercicio.Además, no se preocupe por "molestar" a la gente en SO. Por eso existe este sitio. Incluso aprendí algo de esto.
fuente
si necesita especificar: locales, debe especificar: parcial o: plantilla
Deberia trabajar
fuente
clone https://github.com/rails/rails.git
? ¿O hay un mejor camino? Lo siento, pero soy relativamente nuevo en RoR y aún no he encontrado una forma buena / fácil / consistente de buscar documentación de Rails ... tal que HAY alguna.http://api.rubyonrails.org/
no se puede buscar fácilmente . y la fuente de git tampoco es ... suspiroPara ser honesto, solo conozco estos casos de uso, porque me he mantenido al día con Rails durante los últimos años y leí los anuncios de que se ha agregado una nueva forma de hacerlo. Yo mismo a menudo cometo un error, pero por lo general se corrige fácilmente.
Es una de esas partes de la API de Rails que no se ha pensado a fondo, si me preguntas. Simplemente acumuló más y más azúcar sintáctico a lo largo de los años, sin menospreciar el comportamiento anterior. El método de render tiene diabetes.
Para empeorar las cosas, el renderizado se comporta de manera diferente en el controlador y en la vista. También miro el contenido del primer argumento para ver si es un archivo, plantilla, acción o parcial. Si comienza con una barra, entonces es un archivo o algo así.
Estoy a favor de utilizar la notación más corta siempre que sea posible. Porque las notaciones cortas comunican la intención bastante bien. Al leerlo, generalmente hace lo que crees que hace. Escribir parciales no es sencillo.
fuente
Aquí está la fuente del método de renderizado de http://api.rubyonrails.org/classes/ActionView/Rendering.html#method-i-render :
¡Espero que esto ayude!
fuente