2009-09-11 4 views
52

Was fehlt mir hier? Ich benutze den haml_scaffold Generator und die Seiten funktionieren gut mit will_paginate. Wenn ich anfange zu basteln, habe ich den Fehler "total_pages" und ich bin mir nicht sicher, was ich da mache. Jeder hat einen Einblick? Ich benutze mislav-will_paginate 2.3.11.will_paginate undefined Methode `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 
>> 

Antwort

130

try

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

zu

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

hoffe, das hilft

+1

Ghaaa! Ich wusste, dass es so dumm war. Habe lange auf den Bildschirm geschaut. Süßer Dank! – mikewilliamson

+4

Danke Jirapong! Du hast gerade mein 5 Stunden Problem gelöst! Hinweis für andere: Wenn Sie searchlogic verwenden, wird beim Versuch, search.paginate zu verwenden, ein Fehler ausgegeben. Die Verwendung der .paginate-Methode auf dem @whatever-Objekt, nach dem Sie eigentlich suchen, könnte helfen :-) –

+0

Ich habe die folgende Abfrage, die den Lösungen ähnlich aussieht, aber immer noch den gleichen Fehler '@users = @ company.users.page auslöst (params [: page]). sort_by {| u | u.cards.first.card_visits.count} .reverse' irgendwelche Tipps? –

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

@locations muss sich ändern ein Objekt sein

in Ihrem Beispiel @locations ist ein Array

Array kippe total_pages Methode

+0

will_paginate gibt diese Methode an die Array-Klasse, wenn Sie paginate auf einem Array aufrufen, wird es in paginate collection konvertiert, die diese Methode haben –

28

enthalten haben
require 'will_paginate/array' 

vor, dass Code geladen wird Ihr Problem lösen.

+0

wo? in der Sicht oder der Controller? –

+0

Fügen Sie 'will_paginate/array' zu Ihrem Controller hinzu. will_paginate funktioniert nur für Objekte (nicht für Array!), es sei denn, du sagst es. –

+3

@Lior - Ich habe dies in Controller hinzugefügt, sowie ich versuche mit der Erstellung eines Initialisierer, aber immer noch den gleichen Fehler – kamal

7

Wenn jemand anderes dieses Problem hat. In meinem Fall habe ich die Seitennummerierung in meiner Controller-Methode zuletzt nicht aufgerufen.

Beispiel Vorher:

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

Beispiel nach: ich die Paginierung letzten in meiner Methode genannt, da Schienen von oben nach unten gelesen und es schien, meine Fehler zu beheben.

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

Ich hatte eine sort_by nach "paginate" und das verursachte dieses Problem. Vielen Dank. – tomascharad