亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Rails:對將局部變量傳遞給局部變量的語法感到困惑

Rails:對將局部變量傳遞給局部變量的語法感到困惑

阿波羅的戰車 2019-12-17 15:10:20
了解Rails在渲染局部(并將局部變量傳遞到局部)方面的“魔力”。為什么這樣做:<%= render "rabbits/form" %>這項工作:<%= render "rabbits/form", :parent => @warren, :flash => flash %>但是這并不能正常工作:<%= render "rabbits/form", :locals => { :parent => @warren, :flash => flash } %>但這確實是:<%= render :partial =>"rabbits/form", :locals => { :parent => @warren, :flash => flash } %>另外,我該如何查找這些細微差別,這樣我就不必打擾別人了?
查看完整描述

3 回答

?
阿晨1998

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上“讓人”生硬。這就是為什么該網站存在。我什至從中學到了一些東西。


查看完整回答
反對 回復 2019-12-17
?
繁星點點滴滴

TA貢獻1803條經驗 獲得超3個贊

如果需要指定:locals,則需要指定:partial或:template


<%= render :partial => "rabbits/form", :locals => {...} %>

應該管用


查看完整回答
反對 回復 2019-12-17
?
Qyouu

TA貢獻1786條經驗 獲得超11個贊

坦率地說,我只知道這些用例,因為過去兩年來我一直在跟上Rails,并閱讀了有關添加了新方法的公告。我通常會自己犯一個錯誤,但通常很容易糾正。

如果您問我,這是尚未完全考慮過的Rails API的那些部分之一。這些年來,它只是積累了越來越多的語法糖,而沒有貶低任何舊行為。渲染方法患有糖尿病。

更糟糕的是,渲染在控制器和視圖中的行為有所不同。我還將查看第一個參數的內容,以查看它是文件,模板,操作還是部分文件。如果以斜杠開頭,則為文件或類似名稱。

我贊成盡可能使用較短的符號。因為簡短的符號確實很好地傳達了意圖。閱讀時,它通常會執行您認為的操作。寫作并不是那么簡單。


查看完整回答
反對 回復 2019-12-17
  • 3 回答
  • 0 關注
  • 781 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號