web-dev-qa-db-fra.com

will_paginate méthode non définie `total_pages '

Qu'est-ce que j'oublie ici? J'utilise le générateur haml_scaffold et les pages fonctionnent bien avec will_paginate. Lorsque je commence à bricoler, je me retrouve avec cette erreur "total_pages" et je ne suis pas sûr de ce que je fais qui est à l'origine de cela. Quelqu'un a-t-il une idée? J'utilise 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
>> 
61
mikewilliamson

essayer de changer

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

à

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

j'espère que cela t'aides

135
Jirapong

comprendre

require 'will_paginate/array' 

avant de charger ce code résoudra votre problème.

29
Neeraj Kumar

Si quelqu'un d'autre a ce problème. Dans mon cas, je n'ai pas appelé la pagination dans ma méthode de contrôleur en dernier.

Exemple avant:

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

Exemple après: J'ai appelé la pagination en dernier dans ma méthode depuis Rails lit de haut en bas et cela a semblé corriger mon erreur.

@foo = Foo.do something
@foo = Foo.paginate(:page => params[:page], :per_page => 15)
10
coletrain
@locations = Location.paginate(:all, :conditions => 'city = springfield')

@locations doit être un objet

dans votre exemple @locations est un Array

tableau ne peut pas avoir la méthode total_pages

5
batman