在Rails中防止N + 1个查询

我已经看到了一些在Rails中调用ActiveRecord的find方法时传递一个:include哈希值的例子。 但是,我还没有看到任何关于这是否可以通过关系方法的例子。 例如,假设我有以下内容:

 def User  :user_favorites end def Favorite  :user_favorites end def UserFavorite < ActiveRecord::Base belongs_to :user belongs_to :favorite end 

我看到的所有示例都显示如下代码:

 User.find(:all, :include => :favorite) 

但我没有看到任何关于使用关系的例子。 相反,我可以做这样的事情吗?

 User.favorites(:include => :user) 

您不能将关系用作Class方法。 它是实例方法。 你可以打电话

 @user.favorites 

看看这个关于Eager Loading的截屏video

http://railscasts.com/episodes/22-eager-loading

这将是

  User.find(:all, :include => :favorites) 

或者对于Rails 3.x.

  User.includes(:favorites)