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')
@locations
moet een object zijn
in uw voorbeeld is @locations
een 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!