【问题标题】:will_paginate undefined method `total_pages'will_paginate 未定义的方法`total_pages'
【发布时间】:2010-11-27 09:19:13
【问题描述】:

我在这里缺少什么?我正在使用 haml_scaffold 生成器,并且页面与 will_paginate 一起工作正常。当我开始修修补补时,我最终得到了这个“total_pages”错误,我不确定我在做什么导致它。任何人有任何见解? 我正在使用 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
>> 

【问题讨论】:

    标签: ruby-on-rails will-paginate


    【解决方案1】:

    尝试改变

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

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

    希望对你有帮助

    【讨论】:

    • 哇!我知道那是愚蠢的事情。盯着屏幕看了很久。非常感谢!
    • 感谢吉拉蓬!你刚刚解决了我 5 小时的问题!对其他人的提示:如果使用 searchlogic,尝试使用 search.paginate 会抛出错误。在您实际搜索的 @whatever 对象上使用 .paginate 方法可能会有所帮助:-)
    • 我有以下查询,看起来与解决方案相似,但仍然抛出相同的错误@users = @company.users.page(params[:page]).sort_by {|u| u.cards.first.card_visits.count }.reverse任何提示?
    • 将方法从page 切换到paginate 在同一个查询中给我can't dup NilClass 错误。
    • paginate() 一个带有可分页的新数组,但它没有使@locations 可分页数组。
    【解决方案2】:

    包括

    require 'will_paginate/array' 
    

    在加载该代码之前将解决您的问题。

    【讨论】:

    • 在哪里?在视图或控制器中?
    • 将 require 'will_paginate/array' 添加到您的控制器。 will_paginate 仅适用于对象(不适用于数组!),除非您告诉它这样做。
    • @Lior - 我已经在控制器中添加了这个,并且我尝试创建一个初始化程序,但仍然得到同样的错误
    【解决方案3】:

    如果其他人遇到此问题。就我而言,我没有最后在我的控制器方法中调用分页。

    之前的示例:

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

    之后的示例: 我在我的方法中最后调用了分页,因为 rails 从上到下读取,它似乎解决了我的错误。

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

    【讨论】:

    • 我在“分页”之后有一个 sort_by,这导致了这个问题。谢谢。
    【解决方案4】:
    @locations = Location.paginate(:all, :conditions => 'city = springfield')
    

    @locations 必须是一个对象

    在您的示例中,@locationsArray

    数组不能有 total_pages 方法

    【讨论】:

    • will_paginate 把这个方法交给数组类,如果你在一个数组上调用 paginate,它会把它转换成 will paginate 集合,它有这个方法
    【解决方案5】:

    我遇到了类似的错误undefined method 'total_pages' for ActiveRecord_AssociationRelation

    事实证明,重命名我的变量解决了这个问题。

    这是我的代码:

    @reviews = @user.reviews.paginate(page: params[:page], per_page: 5).order('created_at DESC')
    

    我改成这样了:

    @user_reviews = @user.reviews.paginate(page: params[:page], per_page: 5).order('created_at DESC')
    

    它解决了这个问题。这很奇怪,但可能存在某种冲突。

    由于我花了几个小时研究,我认为它有一天也会对某人有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-15
      • 1970-01-01
      • 2016-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多