2015-03-18 6 views
0

Я использую рендер с частичными столами в моем приложении, но у меня проблема с одним, и я не понимаю, почему.Render partial with locals

Я вызываю частично рекурсивно.

#index.html.slim 
= render partial: 'medias/special_content', locals: {shops: @shops, shop: @shop} 

#medias/_special_content.html.slim 
= render partial: 'medias/more_specific', locals: {shops: shops, shop: shop} 

#medias/_more_specific.html.slim 
- if shops.nil? 
    #Some code 

Вот моя ошибка:

undefined local variable or method `shops' for #<# 

<Class:0x0000000775c360>:0x007f027cff5c28> 
    app/views/medias/_more_specific.html.slim:130:in 
    `_app_views_medias__more_specific_html_slim___1518734296928926472_69824330512820' 
actionpack (3.2.17) lib/action_view/template.rb:145:in `block in render' 
activesupport (3.2.17) lib/active_support/notifications.rb:125:in `instrument' 
actionpack (3.2.17) lib/action_view/template.rb:143:in `render' 
actionpack (3.2.17) lib/action_view/renderer/partial_renderer.rb:265:in `render_partial' 
actionpack (3.2.17) lib/action_view/renderer/partial_renderer.rb:238:in `block in render' 
actionpack (3.2.17) lib/action_view/renderer/abstract_renderer.rb:38:in `block in instrument' 
activesupport (3.2.17) lib/active_support/notifications.rb:123:in `block in instrument' 
activesupport (3.2.17) lib/active_support/notifications/instrumenter.rb:20:in `instrument' 
activesupport (3.2.17) lib/active_support/notifications.rb:123:in `instrument' 
actionpack (3.2.17) lib/action_view/renderer/abstract_renderer.rb:38:in `instrument' 
actionpack (3.2.17) lib/action_view/renderer/partial_renderer.rb:237:in `render' 
actionpack (3.2.17) lib/action_view/renderer/renderer.rb:41:in `render_partial' 
actionpack (3.2.17) lib/action_view/renderer/renderer.rb:15:in `render' 
actionpack (3.2.17) lib/action_view/helpers/rendering_helper.rb:24:in `render' 
app/views/medias/_special_content.html.slim:20:in 
... 
+0

Вставить еще пару уровней stacktrace – AshwinKumarS

+0

Я добавил – BriceB

ответ

1

Если это то же парциальное где ошибка происходящая из, то это выглядит, как вы отдавая more_specific парциального откуда-то еще (т.е. не от special_content) и не передавать требуемые переменные через locals. Потому что в противном случае я не думаю, что эта ошибка возможна.

Вы также можете попробовать простой render синтаксис, например, так:

render path_to_parent_partial, shops: @shops, shop: @shop # in index 
render path_to_child_partial, shops: shops, shop: shop # in parent 

Но первый, поиск 'more_specific' в вашем проекте и посмотреть, где вы не передавая переменную shops. Вы также можете проверить вывод журналов сервера Rails, чтобы посмотреть, какие файлы визуализации отображаются.

+0

Это первое, что я проверил. Эта часть никогда не называется без прохождения «магазинов». Что происходит с '@ магазинов' или' @ shop' с нуля? Возможно ли иметь эту ошибку в этом случае? – BriceB

+0

Нет. Если они ноль, тогда «магазины» должны быть по крайней мере определены как «nil». – Humza

+0

Вот что я подумал и почему я проверяю его с помощью '- if shops.nil?' – BriceB

0

Вы можете направить вызов @shops в # medias/_more_specific.html.slim, потому что это переменная экземпляра, поэтому она также будет доступна здесь.

  • если @ shops.blank?
+0

Я не хочу этого делать, потому что это частичное вызывается из множества других представлений, и я не хочу каждый раз создавать переменную экземпляра на моем контроллере. Вот почему я использую 'locals' – BriceB