在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)