Жаждет загрузить полиморфную ассоциацию с нумерацией страниц Kaminara

#ruby-on-rails #ruby-on-rails-3 #polymorphic-associations #eager-loading #kaminari

#ruby-on-rails #ruby-on-rails-3 #полиморфные ассоциации #нетерпеливая загрузка #kaminari

Вопрос:

Я пытаюсь с нетерпением загрузить полиморфную ассоциацию, одновременно разбивая страницы с использованием драгоценного камня Kaminari:

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

Я получаю сообщение об ошибке:

ActiveRecord::Ошибка eagerloadpolymorphic в Pages#dashboard

Показывает ‘БЛА-БЛА-БЛА’ / dashboard.html.erb, где поднята строка # 49: Не удается быстро загрузить полиморфную ассоциацию :news_source

Когда я удаляю область видимости Kaminari ( .page[:страница]).per(10) ), ошибка исчезает.

У кого-нибудь есть идеи? В этой статье предполагается, что быстрая загрузка с полиморфными ассоциациями поддерживается, но только в том случае, если условия / порядок, которые могут быть применены к отношению в качестве области видимости, не ссылаются ни на какие другие таблицы (если они ссылаются, то Rails использует метод LEFT OUTER JOIN для быстрой загрузки, который не может работать с полиморфными ассоциациями). Итак: ссылается ли Kaminari на другую таблицу?

Был бы признателен за любой совет!

Приветствия.

Комментарии:

1. Можете ли вы отредактировать свой пост и добавить модели?

2. Или, может быть, что-то вроде: Kaminari.paginate_array(@ news_items.all).page(параметры [:страница]).per(10)

3. Этому вопросу более 6 месяцев, и я думаю, что мой код действительно продвинулся вперед. Попытаюсь вернуться к этому позже сегодня.

4. вы пробовали добавить includes(:news_source) в конец вашего выражения?

Ответ №1:

Вы всегда должны использовать preload для полиморфных ассоциаций.

Эта ошибка может возникнуть из-за того, что includes решает вызвать eager_load , нужно ли запрашивать условия для ассоциации, а полиморфные ассоциации поддерживаются только preload . Это есть в документации