includes
說明
- 這是使用在資料庫的搜尋上,對應於資料庫的in指令,可以一次把想找的資料,
使用情境
避免N+1Query的問題(嚴重的拖慢效能!)
- 使用一般的搜尋方式 user.car.name #這個方法會丟出十一次的Query,先找出使用者的資料,再依照使用者的資料一筆一筆把使用者擁有汽車的名字抓出來
- 使用includes的搜尋方式 User.include(:car) #一開始會抓出使用者的資料,然後利用sql in的方式抓出所有的資料
使用方式
-
使用在controller裡面
your controller
def index @users = User.include(:car).paginate( :page => params[:page], :per_page => 20 ) end
-
使用在model裡面
your model
class User < ActiveRecord::Base has_one :foo, :include => [:bar] end
優點:
- 大幅減低資料庫Query的次數