2012-04-03 49 views
7

我想傳遞一個局部變量,它包含來自特定頁面的原點,這個變量只包含一個帶有值的符號。Render @object和locals vs render:局部

當我使用此代碼它運行完美,原點變量是在部分訪問:

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

但是,當我使用此代碼,產地沒有設置,並在局部無法訪問:

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

這裏有什麼區別?第二行代碼是否不像第一行那樣渲染部分?

+0

豈不是':當地人=> {:起源=> :像冊}'? – Nick 2012-04-03 14:56:26

+0

@Nick確實這是一個錯字,在我的應用程序中使用:locals => {:origin =>:gallery},所以這不是問題。但是,趕上!:) – SteenhouwerD 2012-04-05 13:03:19

回答

8
<%= render @products %> 

確實是渲染部分的簡寫語法。但使用簡寫語法,Rails將忽略「:locals」變量。 Rails Guides還有更多。

所以如果你想傳遞額外的選項到渲染,你必須指定「:partial => ...」。如果你想知道爲什麼發生這種情況,你可以看看Rails source

+0

你可以傳遞一個局部變量到'@ products'的末尾,它對我有用。 – 2013-02-27 11:31:00

1

這裏有一個很好的解釋:Rails: confused about syntax for passing locals to partials

短的版本是,你可以省略:locals在第二個例子:

render @products, :origin => :gallery 
+0

絕對不適合我(Rails 3.2.13)。與其他問題的鏈接很有幫助。但我認爲你的例子是錯誤的,因爲你正在嘗試使用收集快捷方式,不幸的是它不會讓你傳遞當地人。你可能正在想'渲染「產品」,:origin =>:gallery' – Arcolye 2013-04-02 13:39:17