Rails:急于加载获取关联,而不是找到
问题描述:
我有三个嵌套模型:user
有很多plates
和plate
有很多fruits
。我还有一个current_user
帮助器方法,该方法在before过滤器中运行以提供身份验证。所以当我到达我的控制器时,我已经有了我的user
对象。我如何一次加载所有用户的plates
和fruits
?Rails:急于加载获取关联,而不是找到
换句话说,我想这样做:
@plates = current_user.plates(include: :fruits)
我怎样才能做到这一点?
我正在使用Rails 3.1.3。
答
您可能会想要在您的关系上使用提供的#includes
方法。除非您打算立即处理记录,否则请勿使用#all
,否则将立即击败多种形式的缓存。
也许是这样的:@plates = current_user.plates.includes(:fruits)
不幸的是,Rails的API不被视为有据可查的,因为他们应该的部分。我建议您查看下面的资源,如果您有任何关于Rails的查询界面,任何进一步的问题:
查询界面可能是Rails的堆栈中最困难的部分以跟上,尤其是与Rails 3.0和3.1所做的更改。
答
你可以做
ActiveRecord::Associations::Preloader.new([current_user], :plates => :fruit).run
要急于负荷协会CURRENT_USER被loased后。第二个参数可以是任何东西,你通常会传递给includes
:一个符号,符号的数组,哈希等
答
@plates = current_user.plates.all(:include => :fruits)
应该这样做。
该问题确实询问如何加载_all_。 :) AR#全部都可以使用,除非你已经在大规模处理网站,或者你知道你是。 – 2012-01-08 20:15:04
尽可能延迟数据库的实际查找被认为是最佳做法。 #都失败了这种做法。包括 – locriani 2012-01-08 20:18:20
#就是我正在寻找的东西。谢谢! – 2012-01-09 08:01:38