2013-11-13 4 views
2

Я в настоящее время делает список сообщений, как это:Rails - Частичный рендер получает неправильный объект?

<%= render partial: "layouts/modules/forums/posts/post", collection: @topic.posts %>

Это прекрасно работает. Тем не менее, внутри _post.html.erb, я называю

<%= render partial: "layouts/users/name", user: post.user %>

Это делает имя, но это своего рода повторное использование первого объекта он получает. Чтобы помочь объяснить, я добавил несколько отладок:

<% puts("_post user: "+post.user.name) %> в _post.html.erb и аналогично помещается в _name erb. (_post ставит перед рендерингом _name). Это результаты:

_name user: User1 
_post user: User1 
_name user: User1 
_post user: User2 
_name user: User1 

Почему он это делает? Вы ожидаете, что 1. _post будет предшествовать _name, и 2. Когда вы проходите по почте, он использует сообщение, а не тот, который он получил раньше.

Можете ли вы объяснить это мне и, может быть, предоставить мне решение проблемы, которую у меня есть? Спасибо!

+0

, как это сообщение, дойдя в файл _post.html.erb, вообще? – rogerdpack

+0

@rogerdpack Я предоставил эту строку, '<% = render partial:" layouts/modules/forums/posts/post ", collection: @ topic.posts%>" отображает страницу _post.html.erb –

+0

что делать, если вы это сделаете как render ...: as =>: post? Какова ценность @ topic.posts? – rogerdpack

ответ

1

Вероятно, вы должны включать в себя сообщения, когда вы найдете тему, Topic.find(params[:topic_id]).includes(:posts) , что решает проблему п + 1 запрос

Смежные вопросы