Использование @instance_variables в партиалах - плохой дизайн.
Использование переменной экземпляра в партиалах работает, но может усложнить поддержку приложений, если изменения когда-либо понадобятся.
Недостатком использования переменных экземпляра в партиалах является то, что вы создаете зависимость в партиале от чего-то вне области партиала (связывание). Это усложняет частичное повторное использование и может вызвать изменения в нескольких частях приложения, если вы хотите внести изменения в одну часть.
Частицы, которые используют переменные экземпляра:
- должно измениться, когда переменная экземпляра в любом контроллере, который использует частичные изменения, изменяет либо имя переменной экземпляра, либо ее тип, либо структуру данных
- приводит к тому, что все действия контроллера, использующие частичное, изменяются одинаково в одно и то же время, когда происходят изменения в том, как используется переменная экземпляра
- препятствует повторному использованию, поскольку их можно легко повторно использовать только в действиях, которые устанавливают переменные экземпляра с тем же именем и данными
Вместо этого передавайте локальные данные частям:
<%= render 'reusable_partial', :item => @item %>
Теперь, поскольку частичное ссылается только на item
, а не @item
, действие, которое отображает представление, которое отображает reusable_partial, можно свободно изменять, не затрагивая reusable_partial и другие действия / представления, которые его отображают:
<%= render 'reusable_partial', :item => @other_object.item %>
Кроме того, это можно использовать повторно в тех случаях, когда @item:
<%= render 'reusable_partial', :item => @duck %>
Если мой @duck
изменится в будущем и больше не будет крякать, как этого ожидает reusable_partial (изменяется интерфейс объекта), я также могу использовать адаптер для передачи того типа элемента, который ожидает reusable_partial:
<%= render 'reusable_partial', :item => itemlike_duck(@duck) %>
Всегда
Существует множество ситуаций, когда вам, вероятно, не нужны расцепленные партиалы, подобные этой, и в краткосрочной перспективе проще использовать переменную экземпляра. Однако трудно предсказать будущие потребности вашего приложения.
Как таковая, это способствует хорошей общей практике при относительно низкой стоимости.