Ruby 板


LINE

※ 引述《godfat (godfat 真常)》之銘言: : ※ 引述《tonytonyjan (南洋大兜蟲)》之銘言: : : 環境: : : Ruby 1.9.2 Rails 3 : : 狀況: : : 我在閱讀Rails Guide時,發現 after_initialize 和 after_find : : 沒有相對的 before_initialize 及 before_find : : 並說要使用時必須以 method define,不能用 handler : : 摘錄: : : If you try to register after_initialize or after_find using macro-style class : : methods, they will just be ignored. : : This behaviour is due to performance reasons, since after_initialize and : : after_find will both be called for each record found in the database, : : significantly slowing down the queries. : : 我覺得這樣的解釋我還是看不太懂 : : 1. 這和 self reflection 有關係嗎? : 這邊 self reflection 是指? 就是反射,我想handler靠的就是反射做到的吧,而反射比起直接呼叫要來得吃效能 所以忽略handler的寫法,就視同避免反射發生,讓效率更好 但這也只是我的猜測,沒有什麼根據 http://en.wikipedia.org/wiki/Reflection_(computer_programming) : : 2. 一個 select query 可能包涵數萬筆資料,不管是用 method define 還是 handler : : ,都要被呼叫數萬次吧?如此效能還不是一樣差嗎? : 我也覺得沒差..... 應該一樣,不然就是他寫得有問題? 同上面的回覆 : : 3. 對一個 callback 同時使用 method define 和 handler 會導致 handler 被蓋掉嗎? : 實驗看看? 實驗結果是不會蓋掉,但是有新的發現: 我的程式碼是這樣: 6 before_validation :test 7 8 def before_validation 9 logger.info("Using method define."); 10 end 11 12 def test 13 logger.info("Using handler"); 14 end Log: DEPRECATION WARNING: Base#before_validation has been deprecated, please use Base.before_validation :method instead. (called from <class:Grade> at /usr/home/tonytonyjan/public_html/rails/snowall/app/models/grade.rb:6) Using handler Using method define. 但是我對調一下順序,警告又會消失: 6 def before_validation 7 logger.info("Using method define."); 8 end 9 10 before_validation :test 11 12 def test 13 logger.info("Using handler"); 14 end 第二個版本的程式碼我覺得很奇怪,如果說before_validation的handler是method 而註冊handler的功能就寫在裡面,那麼照理來說 handler寫法會因為先被我定義的before_validation 給 override 導致無效吧…… 但實驗結果卻還是有註冊到,百思不得其解…… 還有更奇怪的…… 10 after_initialize :test 11 12 def test 13 logger.info("Using handler"); 14 end Log: Using handler 所以我被文件騙了嗎?(眼神死) 而我照著文件的說的做,用method define,竟然也跑出和上面同樣的警告…… 誰可以告訴我這是為什麼Orz : : 4. 我想看原始碼,但是在github裡面有如大海撈針,希望得到眾神的指引 : 你可以直接看電腦裡裝好的 source, 然後用搜尋的 : 抱歉現在沒有空,所以就先不查也不實驗了.. 實驗完就到吃飯時間了,等等再查Orz 謝謝真常大的回覆=) --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.227.148.54







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:e-shopping站內搜尋

TOP