Любые переменные экземпляра, которые вы определяете в вашем контроллере, автоматически распространяются на представление, поэтому нет необходимости передавать их явно. Это работает не только для вашего начального представления, но и для любых частичных элементов, отображаемых в процессе.
Вам нужно будет отправлять :locals
переменные, когда вы вызываете один и тот же фрагмент, но вам нужно, чтобы он отображал разные вещи, которые не могут быть приняты с :object
или :collection
.
Вот пример неправильного использования переменных экземпляра:
# Bad form
<%- @foo = 'example1' %>
<%= render(:partial => 'bar') %>
<%- @foo = 'example2' %>
<%= render(:partial => 'bar') %>
Лучший способ таков:
<%= render(:partial => 'bar', :locals => { :foo => 'example1' }) %>
<%= render(:partial => 'bar', :locals => { :foo => 'example2' }) %>
Разница в том, что вы увидите переменную в частичном виде foo
вместо @foo
. Помните, что локальные переменные могут быть неопределенными, если они не переданы, что может вызвать проблемы, поэтому тщательно протестируйте.