2012-01-07 40 views
1

我有三个嵌套模型:user有很多platesplate有很多fruits。我还有一个current_user帮助器方法,该方法在before过滤器中运行以提供身份验证。所以当我到达我的控制器时,我已经有了我的user对象。我如何一次加载所有用户的platesfruitsRails:急于加载获取关联,而不是找到

换句话说,我想这样做:

@plates = current_user.plates(include: :fruits) 

我怎样才能做到这一点?

我正在使用Rails 3.1.3。

回答

1

您可能会想要在您的关系上使用提供的#includes方法。除非您打算立即处理记录,否则请勿使用#all,否则将立即击败多种形式的缓存。

也许是这样的:@plates = current_user.plates.includes(:fruits)

不幸的是,Rails的API不被视为有据可查的,因为他们应该的部分。我建议您查看下面的资源,如果您有任何关于Rails的查询界面,任何进一步的问题:

查询界面可能是Rails的堆栈中最困难的部分以跟上,尤其是与Rails 3.0和3.1所做的更改。

+0

该问题确实询问如何加载_all_。 :) AR#全部都可以使用,除非你已经在大规模处理网站,或者你知道你是。 – 2012-01-08 20:15:04

+0

尽可能延迟数据库的实际查找被认为是最佳做法。 #都失败了这种做法。包括 – locriani 2012-01-08 20:18:20

+0

#就是我正在寻找的东西。谢谢! – 2012-01-09 08:01:38

0

你可以做

ActiveRecord::Associations::Preloader.new([current_user], :plates => :fruit).run 

要急于负荷协会CURRENT_USER被loased后。第二个参数可以是任何东西,你通常会传递给includes:一个符号,符号的数组,哈希等

-2
@plates = current_user.plates.all(:include => :fruits) 

应该这样做。