will_paginate неопределенный метод `total_pages'
-
05-07-2019 - |
Вопрос
Чего я здесь не понимаю?Я использую генератор 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
>>
Решение
попытайся измениться
@locations.paginate(:page => 1, :per_page => 2)
Для
@locations = @locations.paginate(:page => 1, :per_page => 2)
надеюсь, это поможет
Другие советы
включать в себя
require 'will_paginate/array'
перед загрузкой этот код решит вашу проблему.
Если у кого-то еще возникла эта проблема. В моем случае я не вызывал нумерацию страниц в моем методе контроллера последним. Р>
Пример до .
@foo = Foo.paginate(:page => params[:page], :per_page => 15)
@foo = Foo.do something
Пример после . Я назвал пагинацию последним в моем методе, так как рельсы читают сверху вниз, и это, похоже, исправило мою ошибку. Р>
@foo = Foo.do something
@foo = Foo.paginate(:page => params[:page], :per_page => 15)
@locations = Location.paginate(:all, :conditions => 'city = springfield')
@locations
должен быть объектом
в вашем примере @locations
является Array
массив не может иметь метод total_pages