will_paginate неопределенный метод `total_pages '

Что мне здесь не хватает? Я использую генератор haml_scaffold, и страницы отлично работают с will_paginate. Когда я начинаю возиться, я получаю ошибку total_pages, и я не уверен, что я делаю, что ее вызывает. У кого-нибудь есть понимание? Я использую mislav-will_paginate 2.3.11.

mike@jauntyjackalope:~/project$ script/console
Loading development environment (Rails 2.3.4)
>> @locations = Location.find_all_by_city("springfield")
=> [#<Location id: 3, address: "123 Main St", city: "springfield", phone: "321-1234", business_id: 2>]
>> @locations.class
=> Array
>> @locations.collect{|loc| loc.business}
=> [#<Business id: 2, name: "A Bar", website: "www.abar.com", business_owner_id: 1, created_at: "2009-08-31 21:13:10", updated_at: "2009-08-31 21:13:10">]
>> @locations.class
=> Array
>> @locations.paginate(:page => 1, :per_page => 2)
=> [#<Location id: 3, address: "123 Main St", city: "springfield", phone: "321-1234", business_id: 2>]
>> helper.will_paginate(@locations)
NoMethodError: undefined method `total_pages' for #<Array:0xb6f83bc4>
 from /var/lib/gems/1.8/gems/mislav-will_paginate-2.3.11/lib/will_paginate/view_helpers.rb:197:in `total_pages_for_collection'
 from /var/lib/gems/1.8/gems/mislav-will_paginate-2.3.11/lib/will_paginate/view_helpers.rb:98:in `will_paginate'
 from (irb):7

>> y @locations
--- 
- !ruby/object:Location 
  attributes: 
    city: springfield
    business_id: "2"
    id: "3"
    phone: 321-1234
    address: 123 Main St
  attributes_cache: {}

  business: !ruby/object:Business 
    attributes: 
      name: A Bar
      updated_at: 2009-08-31 21:13:10
      website: www.abar.com
      id: "2"
      created_at: 2009-08-31 21:13:10
      business_owner_id: "1"
    attributes_cache: {}

=> nil
>> 

person mikewilliamson    schedule 11.09.2009    source источник


Ответы (5)


попытаться изменить

@locations.paginate(:page => 1, :per_page => 2)

to

@locations = @locations.paginate(:page => 1, :per_page => 2)

надеюсь это поможет

person Jirapong    schedule 11.09.2009
comment
Гхааа! Я знал, что это что-то глупое. Слишком долго смотрел на экран. Сладкое спасибо! - person mikewilliamson; 11.09.2009
comment
Спасибо, Джирапонг! Вы только что решили мою 5-часовую задачу! Совет для других: при использовании searchlogic попытка использования search.paginate вызовет ошибки. Использование метода .paginate для любого объекта, который вы действительно ищете, может помочь :-) - person Michael Schmitz; 03.10.2009
comment
У меня есть следующий запрос, который похож на решения, но по-прежнему вызывает ту же ошибку @users = @company.users.page(params[:page]).sort_by {|u| u.cards.first.card_visits.count }.reverse какие-нибудь советы? - person Victor S; 25.04.2012
comment
переключение метода с page на paginate дает мне can't dup NilClass ошибку в том же запросе. - person Victor S; 25.04.2012
comment
paginate () новый массив с возможностью разбиения на страницы, но он не создавал массив @locations с возможностью разбиения на страницы. - person Jirapong; 30.01.2015

включают

require 'will_paginate/array' 

перед загрузкой этот код решит вашу проблему.

person Neeraj Kumar    schedule 03.11.2011
comment
где? в поле зрения или в контроллере? - person Victor S; 25.04.2012
comment
Добавьте в контроллер require 'will_paginate / array'. will_paginate работает только с объектами (не с массивом!), если вы этого не говорите. - person Lior Elrom; 04.01.2014
comment
@Lior - я добавил это в контроллер, а также пытался создать инициализатор, но все равно получаю ту же ошибку - person kamal; 11.05.2015

Если у кого-то еще есть эта проблема. В моем случае я не вызывал разбиение на страницы в моем методе контроллера последним.

Пример до:

@foo = Foo.paginate(:page => params[:page], :per_page => 15)
@foo = Foo.do something

Пример после: Я вызвал разбиение на страницы последним в моем методе, так как rails читает сверху вниз, и, похоже, это исправило мою ошибку.

@foo = Foo.do something
@foo = Foo.paginate(:page => params[:page], :per_page => 15)
person coletrain    schedule 21.07.2013
comment
У меня был sort_by после paginate, и это вызывало эту проблему. Спасибо. - person tomascharad; 12.05.2015

@locations = Location.paginate(:all, :conditions => 'city = springfield')

@locations должен быть объектом

в вашем примере @locations - это Array

массив не может иметь метод total_pages

person batman    schedule 23.11.2010
comment
will_paginate передает этот метод классу массива, если вы вызываете paginate в массиве, он преобразует его в сборку с разбивкой на страницы, в которой есть этот метод - person Dalibor Filus; 17.08.2011

Я столкнулся с похожей ошибкой undefined method 'total_pages' for ActiveRecord_AssociationRelation.

Оказалось, что переименование моей переменной решило проблему.

Вот мой код:

@reviews = @user.reviews.paginate(page: params[:page], per_page: 5).order('created_at DESC')

Я изменил его на это:

@user_reviews = @user.reviews.paginate(page: params[:page], per_page: 5).order('created_at DESC')

И это решило проблему. Это очень странно, но, возможно, произошел какой-то конфликт.

Поскольку я потратил несколько часов на исследования, я подумал, что когда-нибудь это тоже может кому-то помочь!

person NZisKool    schedule 19.07.2020