2015-12-30 81 views
0

在效率方面,是它更好地做到這一點:ActiveRecord如何在同一個條目上處理多列查詢?

child = @user.child 
foo1 = entry.foo1 
foo2 = entry.foo2 

foo1 = @user.child.foo1 
foo2 = @user.child.foo2 

其中@userChild有一個一對一的關聯。

這些查詢究竟如何在Rails中工作,特別是ActiveRecord? Rails會在控制器實例中隱式地將參考保存到@user.entry,還是Rails會執行多個數據庫查詢?其次,它依賴於ORM/DB嗎?

回答

1

無論你的例子將觸發3個查詢(如果沒有#includes

#child第一和另外兩人爲#foo1#foo2

如果您在用戶對象上調用N次#child方法,它將只觸發一個數據庫查詢,因爲ActiveRecord會在您第一次請求子對象時將子對象緩存到您的用戶對象中。

如果您使用的是PostgreSQL,MySQL,SQLite等,ActiveRecord的行爲將會相同。 但是其他ORM可能不會以這種方式實現。

相關問題