2009-09-11 11 views
52

Cosa mi manca qui? Sto usando il generatore haml_scaffold e le pagine funzionano bene con will_paginate. Quando comincio ad armeggiare, finisco con l'errore "total_pages" e non sono sicuro di quello che sto causando. Qualcuno ha qualche intuizione? Sto usando mislav-will_paginate 2.3.11.will_paginate metodo undefined `total_pages '

[email protected]:~/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 
>> 

risposta

130

tenta di modificare

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

a

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

speranza che questo aiuta

+1

Ghaaa! Sapevo che era qualcosa di stupido. Sono stato a guardare a lungo lo schermo. Grazie! – mikewilliamson

+4

Grazie Jirapong! Hai appena risolto il mio problema di 5 ore! Suggerimento per gli altri: se si utilizza searchlogic, provare a utilizzare search.paginate causerà errori. L'utilizzo del metodo .paginate sull'oggetto @whatever che stai effettivamente cercando potrebbe aiutare :-) –

+0

Ho la seguente query, che sembra simile alle soluzioni ma getta ancora lo stesso errore '@users = @ company.users.page (parametri [: pagina]). sort_by {| u | u.cards.first.card_visits.count} .reverse' qualche consiglio? –

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

@locations deve essere un oggetto

nel tuo esempio @locations è un array Array

sopraelevazione ha il metodo total_pages

+0

will_paginate fornisce questo metodo alla classe dell'array, se chiami paginate su un array, lo convertirà in impaginato, che ha questo metodo –

28

includono

require 'will_paginate/array' 

prima di caricare il codice risolverà il problema.

+0

dove? nella vista o nel controller? –

+0

Aggiungi richiede 'will_paginate/array' al controller. will_paginate funziona solo sugli oggetti (non sull'array!) a meno che tu non lo stia dicendo. –

+3

@Lior - ho aggiunto questo nel controller così come cerco con la creazione di un inizializzatore, ma ottenendo sempre lo stesso errore – kamal

7

Se qualcun altro ha questo problema. Nel mio caso non ho chiamato l'impaginazione nel mio metodo di controllo per ultimo.

Esempio Prima:

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

Esempio Dopo: ho chiamato l'impaginazione ultima nel mio metodo poiché rotaie legge da cima a fondo e sembrava per risolvere il mio errore.

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

Ho avuto un sort_by dopo "paginare" e questo stava causando questo problema. Grazie. – tomascharad

Problemi correlati