2015-10-14 2 views
1

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

Здесь я рендеринг это

(dogs.html.haml)

- dogs.each do |dog| 
    .dog 
     = render 'dog', :locals => { :dog => dog } 

И тогда я хочу переменная собаку, чтобы быть видимой в моем частичной

(_dog.html.haml)

.title 
    = dog.name 

Но это не видно

Что я делаю неправильно?

ответ

1

Вы смешиваете два разных способа рендеринга частичных элементов.

Используйте либо это (традиционная) форма ...

render partial: 'dog', locals: {dog: dog} 

или это новая форма:

render 'dog', dog: dog 

или это еще лучше новая форма, которую вы должны предпочесть :

= render dog 

, но не версия, которую вы написали. Вы взяли часть render 'dog' со второго пути, а часть locals: { dog: dog } - с первого взгляда. Это передает один локальный адрес: locals, который имеет значение хэша.

Третий способ - это предпочтительный способ. Если у вас есть объект ActiveModel, вы можете просто позвонить render <object>, и он будет автоматически выберите правильный для вас частичный вариант, основанный на имени модели.

Это работает и для коллекций моделей ActiveRecord. Вы должны ронять @dogs.each цикл полностью, и просто называть

= render @dogs 

Это будет автоматически вызывать = render dog для каждой собаки в коллекции. Вам просто нужно переместить .dog внутри части _dog.

+0

Это работает! Большое спасибо;) – piechos

+0

Вы также можете отобразить коллекцию с помощью '= render partial:« dog », collection: @ dogs', которая автоматически создаст локальную переменную' dog' для вас [(соответствующие документы)] (http: // api.rubyonrails.org/classes/ActionView/PartialRenderer.html#class-ActionView::PartialRenderer-label-Rendering+a+collection+of+partials) – etdev

+1

@etdev Опять же, это датированный путь, которого вам следует избегать. Лучший способ - просто «= рендеринг @ dogs», который является новым и функционально идентичным способом. – meagar

Смежные вопросы