3 回答

TA貢獻2037條經驗 獲得超6個贊
簡短的答案是render方法查看您傳入的第一個參數。如果傳入哈希(包括:partial => 'foo', :locals => {blah blah blah}
),則它將傳入所有參數作為哈希并相應地解析它們。
如果您將字符串作為第一個參數傳遞,則它將假定第一個參數是您的部分名稱,并將其余部分作為本地變量傳遞。但是,在隨后的調用中,它實際上是分配的:locals => your_locals_argument
,在這種情況下,它是整個:locals => {locals hash}
,而不是{locals hash}
;。即你最終:locals => {:locals => {locals hash}}
而不是:locals => {locals hash}
。
因此,我的建議是始終始終以相同的方式顯式地傳遞值,這樣就不會有問題。為了了解這一點,我直接去代碼本身(ActionPack的/ LIB / base.rb,render()
方法在軌道2; 3的Rails不同)。這是一個很好的鍛煉。
此外,不必擔心在SO上“讓人”生硬。這就是為什么該網站存在。我什至從中學到了一些東西。

TA貢獻1803條經驗 獲得超3個贊
如果需要指定:locals,則需要指定:partial或:template
<%= render :partial => "rabbits/form", :locals => {...} %>
應該管用

TA貢獻1786條經驗 獲得超11個贊
坦率地說,我只知道這些用例,因為過去兩年來我一直在跟上Rails,并閱讀了有關添加了新方法的公告。我通常會自己犯一個錯誤,但通常很容易糾正。
如果您問我,這是尚未完全考慮過的Rails API的那些部分之一。這些年來,它只是積累了越來越多的語法糖,而沒有貶低任何舊行為。渲染方法患有糖尿病。
更糟糕的是,渲染在控制器和視圖中的行為有所不同。我還將查看第一個參數的內容,以查看它是文件,模板,操作還是部分文件。如果以斜杠開頭,則為文件或類似名稱。
我贊成盡可能使用較短的符號。因為簡短的符號確實很好地傳達了意圖。閱讀時,它通常會執行您認為的操作。寫作并不是那么簡單。
- 3 回答
- 0 關注
- 781 瀏覽
添加回答
舉報