繁体   English   中英

防止Rails中的N + 1个查询

[英]Preventing N+1 queries in Rails

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

def User < ActiveRecord::Base
  has_many :user_favorites
  has_many :favorites, :through => :user_favorites
end

def Favorite < ActiveRecord::Base
  has_many :user_favorites
  has_many :users, :through => :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的截屏视频

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

这将是

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

或者对于Rails 3.x.

 User.includes(:favorites)

您可以添加:include到模型的关联,以便在加载对象时急切加载二阶关联。

http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#method-i-belongs_to http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#method-i-has_many

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM