2009-10-08 13 views
6

he lo siguiente en una vista (.html.erb):rubí sobre raíles: Representación parciales en cada elemento de una lista

<% @posts = GetAllPostsFunctions %> (removed for berivity) 

<% @posts.each do |post| %> 
<%= post.title %> 

<%= render :partial => "posts/post_show" %> 
<% end %> 

la posts_show parcial tiene la siguiente:

.... 
<td><%=h @post.title %> </td> 

pero me da el siguiente error

You have a nil object when you didn't expect it! 
The error occurred while evaluating nil.title 

¿Alguna idea?

Respuesta

7

Dado que la variable posteriormente en el cada bucle es una variable local que tiene que hacer que esté disponible para el parcial:

<%= render :partial => "posts/post_show", :locals => {:post => post} %> 

A continuación, puede acceder al título a través del poste variable local:

<td><%=h post.title %> </td> 

También podría simplificar todo al representar las publicaciones como colección. Echar un vistazo a la documentación de los carriles para más información:

http://api.rubyonrails.org/classes/ActionController/Base.html#M000658

+0

impresionante, gracias! – cbrulak

0

Parece que no está configurando el @post del parcial, por lo que cuando se evalúa el parcial obtiene una referencia nula.

bien, asegúrese de que su mensaje ir a buscar funciones son en realidad volviendo algo

+0

Entonces, ¿cómo puedo pasar el objeto 'publicar' en el parcial? – cbrulak

+0

Ver mejor respuesta que la mía :) – MBillock

0

No soy positivo, pero creo que en el parcial que tiene que hacer post.title no @post.title

Lo siento si he entendido mal, yo Soy nuevo en los rieles.

15

también puede simplemente cosas mediante el uso de la: Colección de render: parcial. Que pasan cada elemento en el valor para: colección a una variable local que comparte el nombre de su parcial.

<% @posts = GetAllPostsFunctions %> (removed for berivity) 

<%= render :partial => "posts/post_show", :collection => @posts %> 

En este caso, los carriles rendirá post_show para cada elemento de @posts con el post_show variable local ajustado en el elemento actual. También proporciona métodos prácticos de contador.

Utilizar con éxito este enfoque requeriría cambiar el nombre de la aplicación/views/posts/_post_show.html.erb parcial a app/views/posts/_post.html.erb o cambiar cada aparición de publicación en su parte parcial a post_show. Si cambió el nombre parcial a la _post.html.erb convencional que a su vez permitirá simplemente hacer:

<%= render :partial => @posts %> 

Qué va a hacer que el parcial para todos los envíos que solo en la variable @posts.

Cuestiones relacionadas