2015-10-14 108 views
1

我試圖通過迭代變量來渲染我的partials,然後將特定變量傳遞給partial,但它沒有看到這個變量。在haml中渲染partials並將變量傳遞給它

在這裏,我使其

(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再次,這是一個過時的方式,你應該避免。更好的方法是簡單地使用'= render @ dogs',這是新的功能相同的方式。 – meagar