我已經在一些資源在網上找到喜歡做的東西,當比:延遲加載3.2.6
cars = Car.where(:colour => 'black')
不執行查詢,直到你做這樣的事情:
cars.each {|c| puts c.name }
然而在我的Rails 3.2.6項目,當我做在控制檯以下:
User.where(:first_name => "John")
我得到如下:
User Load (1.2ms) SELECT `users`.* FROM `users` WHERE `users`.`first_name` = 'John'
因此,查詢正在執行的權利?
延遲加載去哪兒了?或者我在這裏錯過了什麼?
這是在控制檯的動態環境中探索(通常是富有成效的努力)實際上會導致ActiveRecord工作方式混亂的情況之一。我已經知道這種懶惰加載行爲,但我偶爾也會被這個絆住。我真的很喜歡你的「假」主意。當在控制檯中工作時,會盡量使我肌肉記憶的一部分。 – 2013-12-06 16:26:12
感謝您的好評!究竟哪些事情會觸發查詢加載ActiveRecord :: Relation對象? '拔',說? – 2015-01-09 16:40:31
@kitkat pluck運行一個只返回列值而不是AR對象的查詢。像每一個,地圖,拒絕,to_a等都會導致關係被加載。基本上在關係上缺少一個方法來加載目標並將方法調用轉發給它。 – 2015-01-09 22:26:41