Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails:在抓取关联时加载,而不是在查找时加载_Ruby On Rails_Ruby On Rails 3.1_Eager Loading - Fatal编程技术网

Ruby on rails Rails:在抓取关联时加载,而不是在查找时加载

Ruby on rails Rails:在抓取关联时加载,而不是在查找时加载,ruby-on-rails,ruby-on-rails-3.1,eager-loading,Ruby On Rails,Ruby On Rails 3.1,Eager Loading,我有三个嵌套模型:user有许多plate和plate有许多果实。我还有一个current_userhelper方法,它在before过滤器中运行,以提供身份验证。所以当我到达我的控制器时,我已经有了我的user对象。如何一次装入所有用户的牌和水果 换句话说,我想做一些类似的事情: @plates = current_user.plates(include: :fruits) 我怎样才能做到这一点 我正在使用Rails 3.1.3。您可以这样做 ActiveRecord::Associatio

我有三个嵌套模型:
user
有许多
plate
plate
有许多
果实。我还有一个
current_user
helper方法,它在before过滤器中运行,以提供身份验证。所以当我到达我的控制器时,我已经有了我的
user
对象。如何一次装入所有用户的
水果

换句话说,我想做一些类似的事情:

@plates = current_user.plates(include: :fruits)
我怎样才能做到这一点

我正在使用Rails 3.1.3。

您可以这样做

ActiveRecord::Associations::Preloader.new([current_user], :plates => :fruit).run
在当前_用户被释放后,立即加载关联。第二个参数可以是通常传递给
的任何内容,包括
:符号、符号数组、散列等

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

应该这样做。

您可能希望对您的关系使用提供的
#includes
方法。不要使用
#all
,除非您打算立即处理记录,否则它会立即破坏许多形式的缓存

可能类似于:
@plates=当前用户.plates.includes(:fruits)

不幸的是,Rails API的某些部分并没有得到应有的良好记录。如果您对Rails查询界面有任何进一步的问题,我建议您查看以下资源:


查询接口可能是Rails堆栈中最难跟上的部分,尤其是在Rails 3.0和3.1进行了更改之后。

问题的确是问如何加载所有内容。:)AR#all可以正常使用,除非你已经在大规模地处理一个站点,或者你知道你正在处理这个站点。最好的做法是尽可能长时间地延迟从数据库中实际查找#那次练习的所有失败都是我一直在寻找的。谢谢