2011-07-13 20 views
1

我發現我可以以多種方式做Model.find找到一個模型的最有效的方法(假設@user是用戶模型的一個實例):通過ID用Model.find

User.find(2) 
=> #<User id: 2, name: "Mike Swift", email: "[email protected]", ... etc ... 

OR

User.find(@user) 
=> #<User id: 2, name: "Mike Swift", email: "[email protected]", ... etc ... 

OR

User.find(@user[:id]) 
=> #<User id: 2, name: "Mike Swift", email: "[email protected]", ... etc ... 

OR

User.find(@user.id) 
=> #<User id: 2, name: "Mike Swift", email: "[email protected]", ... etc ... 

後面三種方法之間有沒有真正的區別? (我已經知道User.find(n)會是最快的)我會想象他們都在同一時間工作,但也許我錯了。

回答

4

在sql方面他們都做同樣的事情。

User.find(2) 

這將是最快的,因爲不需要轉換。

然後User.find(@user.id)User.find(@user[:id])

最後,因爲rails需要將用戶轉換爲ID,所以最後是User.find(@user

+0

我剛更新了這個問題。我已經知道'User.find(n)'是最快的。 '@ user.id'和'@user [:id]'有什麼區別? – Swift

+1

@ user.id表示「調用用戶的方法ID」。 AR爲您制定該方法。您可以覆蓋該方法。 @user [:id]表示「用1個參數(:id)」調用用戶的[]方法「。 AR使它與@ user.id一樣,但是你可以重寫[]方法。 –

0

User.find(2)應該更快,因爲Rails不需要做任何工作來找出id。其他人需要一定程度的消息傳遞才能獲得該ID。

雖然我懷疑差異是非常顯着的。

你可以嘗試所有這些,看看你的日誌,看看需要多長時間才能得到你的迴應。

+0

我其實已經知道'User.find(2)'是最快的。我的意思是後三個選項之間的最快速度。我會澄清這個問題。 – Swift