@item
- переменная экземпляра - она видна всему экземпляру класса.Для целей представлений Rails вы можете рассматривать их как «глобальные» переменные.Например, если у вас есть:
class Foo
def initialize
@bar = "Yay!"
end
def show_bar
puts @bar
end
end
Тогда вызов Foo.new.show_bar напечатает Yay!
, потому что переменная @bar
видна всему экземпляру.
item
с другой стороны, это локальная переменная.Он виден только в той области, в которой он был определен. Rails использует переменную экземпляра для обмена данными между методом контроллера и представлением.
Как правило, партиалы получают локальные переменные, поскольку они не должны быть в 1:1 связь с методом контроллера, как стандартные представления.То есть, хорошо спроектированная частичная не предполагает наличия каких-либо экземпляров («глобальных») переменных.Предполагается, что полный просмотр будет представлен данными, установленными методом контроллера;Предполагается, что частичные данные отображаются с помощью данных, явно переданных им.
Поскольку вы используете это представление в качестве обоих, я бы посоветовал вам преобразовать его в «только частичное, мэм»кусок и полный вид обертки кусок.Таким образом, ваше полное представление может быть таким простым:
<%=render :partial => "item_partial", :locals => {:item => @item} %>
Тогда ваш item_partial всегда будет использовать item
вместо @item
.
Это дает вам возможность упаковать всеваш повторно используемый контент легко, а затем добавьте дополнительный «пух» для полного просмотра по желанию.