【问题标题】:Eager loading a polymorphic association with Kaminara pagination渴望加载与 Kaminara 分页的多态关联
【发布时间】:2011-08-24 01:24:52
【问题描述】:

我正在尝试加载多态关联,同时还使用 Kaminari gem 进行分页:

@news_items = NewsItem.includes(:news_source).not_outdated
.where(:group_id => group_ids).order("created_at DESC").page(params[:page]).per(10)

我收到错误消息:

ActiveRecord::EagerLoadPolymorphicError 在页面中#dashboard

显示 'BLAH BLAH'/dashboard.html.erb 第 49 行提出的地方:不能急于求成 加载多态关联 :news_source

当我删除 Kaminari 范围 ( .page[:page]).per(10) ) 时,错误就会消失。

有人有什么想法吗? This article 建议支持使用多态关联进行预加载,但前提是可能应用于 Relation 作为范围的条件/顺序不引用任何其他表(如果这样做,则 Rails 使用 LEFT OUTER JOIN 方法对于不能在多态关联上工作的急切加载)。那么:Kaminari 是否引用了另一个表?

不胜感激任何建议!

干杯。

【问题讨论】:

  • 您可以编辑您的帖子并添加模型吗?
  • 或者类似:Kaminari.paginate_array(@ news_items.all).page(params[:page]).per(10)
  • 这个问题已经过去了 6 个多月,我认为我的代码已经很好地、真正地继续前进了。今天晚些时候会尝试回顾一下。
  • 您是否尝试在您的表达式末尾添加includes(:news_source)?

标签: ruby-on-rails ruby-on-rails-3 polymorphic-associations eager-loading kaminari


【解决方案1】:

您应该始终使用preload 进行多态关联。

这个错误可能是因为includes决定在需要查询关联条件时调用eager_load,而多态关联只有preload支持。在documentation

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-24
    • 2014-03-13
    • 1970-01-01
    • 2015-02-24
    相关资源
    最近更新 更多