will_paginate undefined methode `total_pages’

Wat mis ik hier? Ik gebruik de haml_scaffold-generator en de pagina’s werken prima met will_paginate. Wanneer ik begin te knutselen, krijg ik deze ‘total_pages’-fout en ik weet niet zeker wat ik doe waardoor het wordt veroorzaakt. Iemand enig inzicht?
Ik gebruik 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
>> 

Antwoord 1, autoriteit 100%

probeer te veranderen

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

naar

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

hoop dat dit helpt


Antwoord 2, autoriteit 20%

opnemen

require 'will_paginate/array' 

voordat u die code laadt, wordt uw probleem opgelost.


Antwoord 3, autoriteit 8%

Als iemand anders dit probleem heeft. In mijn geval heb ik de paginering in mijn controller-methode niet als laatste aangeroepen.

Voorbeeld voor:

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

Voorbeeld na:
Ik noemde de paginering als laatste in mijn methode, omdat rails van boven naar beneden leest en het leek mijn fout te herstellen.

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

Antwoord 4, autoriteit 4%

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

@locationsmoet een object zijn

in uw voorbeeld is @locationseen Array

array kan de methode total_pages niet hebben


Antwoord 5

Ik ondervond een soortgelijke fout undefined method 'total_pages' for ActiveRecord_AssociationRelation.

Het blijkt dat het hernoemen van mijn variabelehet probleem heeft opgelost.

Hier was mijn code:

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

Ik heb het in dit veranderd:

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

En het probleem is opgelost. Het is heel bizar, maar het kan zijn dat er een soort conflict is geweest.

Omdat ik een paar uur aan onderzoek heb besteed, dacht ik dat het op een dag ook iemand zou kunnen helpen!

Other episodes