#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
. Это есть в документации