我有三个嵌套模型:user
有很多plates
,plate
有很多fruits
。我还有一个current_user
辅助方法,它在before过滤器中运行以提供身份验证。所以当我到达我的控制器时,我已经有了user
个对象。如何一次加载所有用户的plates
和fruits
?
换句话说,我想做点什么:
@plates = current_user.plates(include: :fruits)
我怎样才能做到这一点?
我正在使用Rails 3.1.3。
答案 0 :(得分:1)
您可能希望在关系中使用提供的#includes
方法。不要使用#all
除非您打算立即处理记录,否则它将立即失败多种形式的缓存。
可能类似于:@plates = current_user.plates.includes(:fruits)
不幸的是,Rails API的某些部分没有得到应有的详细记录。如果您对Rails查询界面有任何疑问,我建议您查看以下资源:
查询接口可能是Rails堆栈中最难以跟上的部分,特别是使用Rails 3.0和3.1进行的更改。
答案 1 :(得分:0)
你可以做到
ActiveRecord::Associations::Preloader.new([current_user], :plates => :fruit).run
在current_user被淡化后急切加载关联。第二个参数可以是您通常传递给includes
的任何内容:符号,符号数组,哈希等
答案 2 :(得分:-2)
@plates = current_user.plates.all(:include => :fruits)
应该这样做。