Понимание разбивает области / отношения на страницы

#ruby-on-rails #ruby #ruby-on-rails-3 #will-paginate

#ruby-on-rails #ruby #ruby-on-rails-3 #разбиение на страницы

Вопрос:

Почему Post.page(1).total_pages приводит к:

 Post.page(1).total_pages
undefined local variable or method `total_pages' for #<ActiveRecord::Relation:0x00000006a95230>
 

но

 Post.scoped.page(1).total_pages
 

работает нормально. Любопытно,

 Post.paginate(:page => 1).total_pages
 

работает нормально. Я просмотрел код на Github ( https://github.com/mislav/will_paginate/blob/master/lib/will_paginate/active_record.rb ) и я понимаю, почему работает разбиение на страницы (потому что сначала он вызывает limit … который возвращает активное отношение к записи, очень похожее на scoped). У меня такое чувство, что это как-то связано с этим кодом

 rel = scoped.extending(RelationMethods)
 

Думаю, я не понимаю разницы между этими отношениями активной записи, которые ограничивают возврат, и scoped.extending(RelationMethods). Есть идеи?

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

1. работает ли это: Post.page(1).all.total_pages

2. Какие версии Rails и will_paginate вы используете? Я не могу повторить это.

3. @apneadiving нет, все еще получаем неопределенный метод.

4. @MattSanders Rails 3.1.1 и will_paginate 3.0.2 Я буду продолжать копать….

5. @MattSanders хм, я также не смог воспроизвести это в совершенно новом приложении rails. Мое приложение очень новое и не такое большое, поэтому я посмотрю, смогу ли я найти причину / разницу.

Ответ №1:

Это происходит только при использовании драгоценного камня rails_admin. Он отлично работает в новом приложении Rails 3.1.1 с will_paginate 3.0.2.

Вероятно, администратор Rails что-то делает с методом страницы, хотя я не уверен, что именно.

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

1. В качестве окончательного обновления rails_admin включает в себя камень kaminari для его подкачки. Итак, каким-то образом это мешает will_paginate. В проблемах Github для каждого проекта есть некоторые упоминания о том, что они не работают идеально, поэтому я просто остановился на использовании kaminari и в моем проекте.