2009-09-11 4 views
52

Burada nelerin eksik? Haml_scaffold jeneratörünü kullanıyorum ve sayfalar will_paginate ile iyi çalışıyor. Ben tinkering başladığımda bu 'total_pages' hatası ile biter ve ben ne yaptığımı emin değilim. Herhangi bir fikir sahibi olan var mı? Mislav-will_paginate 2.3.11 kullanıyorum.tanımlanmamış bir yöntem olacaktır "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 
>> 

cevap

130

deneyin bu

+1

Ghaaa! Bunun gibi aptal bir şey olduğunu biliyordum. Ekranda uzun süre dik dik bakıyordum. Tatlı teşekkürler! – mikewilliamson

+4

Teşekkürler Jirapong! Sadece 5 saat problemimi çözdün! Başkaları için ipucu: Eğer searchlogic kullanıyorsanız, search.paginate kullanmayı denemek hataları atar. Aslında arama yapmakta olduğunuz nesne üzerinde @ .paginate yöntemini kullanmak yardımcı olabilir :-) –

+0

Aşağıdaki soruna benzer çözümler görüyorum ama yine de aynı hatayı atar: @users = @ company.users.page (params [: sayfa]). sort_by {| u | u.cards.first.card_visits.count} .reverse' herhangi bir ipucu? –

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

@locations bir nesne

olmalıdır yardımcı

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

umut

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

geçmek için senin örnek @locations yılında

+0

will_paginate bu diziyi dizi sınıfına paginate çağırırsanız, bu yöntemi –

28

sorununuzu çözecek kodu yüklemeden önce

require 'will_paginate/array' 

dahil olamaz TOTAL_PAGES yöntem var bir Array

dizidir. Bu sorunla karşılaşan başka biri varsa

+0

bu yönteme sahip toplama paginate için dönüştürecek, bu sınıf dizisine verir? görünümde veya kontrolörde? –

+0

Eklemek için kontrol cihazınıza 'will_paginate/array' yazın. will_paginate, bunu istemediğiniz sürece yalnızca nesnelerde (dizide değil!) çalışır. –

+3

@Lior - bunu bir denetleyicinin yanı sıra bir başlatıcı oluşturmaya çalışıyorum ama yine de aynı hatayı alıyorum – kamal

7

Benim durumumda, son olarak benim denetleyici yöntemimde sayfa numaralarını aramadım.

Örnek Önce: raylar yukarıdan aşağıya doğru okur ve benim hatayı düzeltmek gibiydi beri benim yöntemi içinde geçen sayfalama seslendi:

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

Örnek sonra.

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

"paginate" den sonra bir sort_by aldım ve bu soruna neden oldu. Teşekkürler. – tomascharad