2009-09-11 74 views
52

我在这里错过了什么?我正在使用haml_scaffold生成器,并且这些页面在will_paginate下正常工作。当我开始修补时,最终会出现这个'total_pages'错误,我不确定我在做什么导致它。任何人有任何见解? 我正在使用mislav-will_paginate 2.3.11。will_paginate undefined method`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 
>> 

回答

130

尝试改变

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

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

希望这有助于

+1

Ghaaa!我知道这是愚蠢的。一直盯着屏幕。甜蜜的感谢! – mikewilliamson 2009-09-11 11:38:24

+4

谢谢Jirapong!你刚刚解决了我的5小时问题! 为他人提示:如果使用searchlogic,试图使用search.paginate会抛出错误。在@whatever对象上使用.paginate方法可能会有所帮助:-) – 2009-10-03 18:08:13

+0

我有以下查询,它与解决方案看起来很相似,但它仍会抛出相同的错误:@users = @ company.users.page (params [:page])。sort_by {| u | u.cards.first.card_visits.count} .reverse'任何提示? – 2012-04-25 18:17:26

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

@locations必须是一个对象

在你的例子@locationsArray

阵列斜面具有TOTAL_PAGES方法

+0

will_paginate将此方法赋予数组类,如果您在数组上调用paginate,它会将其转换为将paginate集合,其中有哪些方法 – 2011-08-17 12:01:24

28

包括

require 'will_paginate/array' 

加载到代码将解决问题之前。

+0

在哪里?在视图还是控制器? – 2012-04-25 18:15:15

+0

将要求'will_paginate/array'添加到您的控制器。除非你告诉它,否则will_paginate只能用于对象(不在数组上!)。 – 2014-01-04 15:18:47

+3

@Lior - 我已经在控制器中添加了这个以及我尝试创建一个初始化器,但仍然得到相同的错误 – kamal 2015-05-11 09:13:54

7

如果其他人有这个问题。在我的情况中,我最后并没有在我的控制器方法中调用分页。

实例之前:

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

实例后: 我打电话给我的方法中的最后拼版因为轨道从上到下读取和它似乎解决我的错误。

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

我有一个sort_by“分页”后,这是造成这个问题。谢谢。 – tomascharad 2015-05-12 14:33:55

相关问题