2013-08-31 52 views
3

我見過人們從 Model.find_by_x(x) 重寫他們的代碼 Model.find_by(x: x)example),我想知道,如果它的時間做一些家政服務。find_by_x確實(輕度)不推薦使用?

是否find_by...確實棄用? (一些證據/討論會很好。) 這Rails commit暗示,它是。同樣在這個ActiveRecord::Base doc這個提交改變它被提到是「輕度不推薦」。

提取的dynamic_finders gem聲稱它不是:「請注意find(primary_key),find_by ...和find_by ...!不會被棄用。」

而且還在4.0 release notes:「除find_by _...和find_by _...!以外的所有動態方法都被棄用」。

回答

4

我知道這個答案是缺乏證據/討論,但我想只想說,這是有道理的,我認爲Model.find_by_attribute和類似應該被棄用 - 即你應該這樣對待他們,並搬走從他們那裏,即使他們沒有正式棄用。原因是這些方法必須通過method_missing去做他們的魔法。所以他們沒有使用find_by(x: y)那麼快,在場景中,只使用ARel:where(x: y).take。這有幫助嗎?

+0

感謝@pdobb,它的確如此。我遵循你的推理。這是一層開銷,對可讀性沒有任何好處,所以離開是有道理的。 –

+0

我對這些發現者的性能方面很感興趣,並且在 之下做了一個快速的基準測試'Benchmark.bm(10)do | x |' 'x.report(「find_by」){ 1000.times {Model.find_by(my_field: 「值」)}}'' x.report( 「find_by_attr」){1000.times {Model.find_by_my_field( 「值」)}}'' end' ' 'user system total real' 'find_by 0.610000 0.250000 0.860000(1.276131)' 'find_by_attr 0.560000 0.040000 0.600000(1.032426)' 對不起格式化! –