2011-02-27 23 views
2

我打電話:如何在集合中使用局部佈局? Rails的

render @users, :layout => "homepage" 

,因爲我想換隻爲主頁(視圖/用戶/ _homepage.html自定義佈局的默認部分用戶(視圖/ _user.html.erb)。 ERB)。

但是,當我這樣做時,我得到了user.name方法的NoMethodError。

出於某種原因,用戶變量似乎沒有在用戶部分內正確初始化。

原來一些測試後,部分網頁甚至沒有得到調用,它直接將用戶部分....

+0

哦,和間隔不會工作,因爲我需要包裝用戶部分的一些佈局代碼,而不僅僅是把東西在每個用戶之間。 – jakeonrails

+0

你從哪裏調用這個渲染語句? –

+0

從主頁控制器視圖中調用索引。 – jakeonrails

回答

2

這不是我想要的解決方案,我相信有可能實際上是一種方法,使只使用一個電話來呈現這項工作,但是這是什麼給了我正確的輸出:

@users.each do |user| 
    render :partial => "users/user", 
     :layout => "users/homepage", 
     :locals => { :user => user } 
end 

或者是它只有在渲染單個資源而不是集合時才能使用:layout選項?

+4

我只是在尋找一種方法來做同樣的事情,你的方式似乎是現在唯一的方法。 http://api.rubyonrails.org/classes/ActionView/PartialRenderer.html獲取更多信息 - 如果你在底部檢查,render_collection和render_partial是兩種完全不同的方法。 – Andrey

0

你應該這樣做

<%= render 'homepage', :collection => @users, :layout => 'homepage' %> 

不知道關於:佈局選項,但你必須通過@users thro:收集

希望它有幫助!

+0

我得到:未定義的局部變量或方法'用戶' – jakeonrails

+0

可能,使用:作爲選項羅伯特建議將與這個特定的建議。 – jakeonrails

1

嘗試增加:as => :user渲染的部分從一個觀點:

<%= render :collection => @users, :as => :user, :partial => 'users/user_short_form', %>

+1

閱讀完文檔後:as選項告訴Rails,您傳遞的參數作爲參數,在本例中,@users將被命名爲您所設置的任何內容:as,作爲局部變量。 但我不認爲這回答了原始問題,但在使用'render'方法時如何使用佈局和集合。 – jakeonrails

0

不知道這是一個新的除了Rails的,但在Rails的4.2.1,我可以通過我收集到partial說法的render

render partial: @users, layout: "homepage"