Рендеринг @объекта и местных жителей против рендера: частичный - PullRequest
7 голосов
/ 03 апреля 2012

Я хочу передать локальную переменную, которая содержит источник, чтобы прийти на определенную страницу, эта переменная содержит только символ со значением.

Когда я использую этот код, он отлично работает, переменная источникадоступно в частичном:

render :partial => "products", :collection => @products, :locals => {:origin => :gallery}

Но когда я использую этот код, источник не устанавливается и недоступен в частичном:

render @products, :locals => {:origin => :gallery}

В чем здесь разница?Разве вторая строка кода не отображает частичную, как первая строка?

Ответы [ 2 ]

8 голосов
/ 18 апреля 2012
<%= render @products %>

Действительно сокращенный синтаксис для рендеринга частичного.Но с сокращенным синтаксисом Rails будет игнорировать переменную ": locals".Об этом есть в Rails Guides .

Так что, если вы хотите передать дополнительные параметры для рендера, вы должны указать ": частичный => ...".Если вы хотите узнать, почему это происходит, вы можете взглянуть на Rails source .

1 голос
/ 29 марта 2013

Здесь есть хорошее объяснение: Rails: сбит с толку из-за синтаксиса для передачи локальных данных в партиалы

Короткая версия заключается в том, что вы можете просто пропустить :locals во втором примере:

render @products, :origin => :gallery
...