使用带有范围的will_paginate时Sitecities中的NoMethodError #index

时间:2013-10-05 02:38:41

标签: ruby-on-rails scope will-paginate

我仍然对铁轨上的红宝石很新,我已经尝试了几个小时来解决这个问题,但事实并非如此。我认为我的范围可能是问题的根源。你能帮我找到解决方法吗?

我有两个模型,sitecity.rb和event.rb。事件属于sitecity和sitecity has_many事件。

在我的sitecities索引页面上,我只想显示至少有一个事件的sitecities。因此我在sitecities.rb中创建了一个范围:

scope :has_event, ->(n = 1) { includes(:events).select { |w| w.events.size >= n } }

我的sitecities索引文件包含:

<%= will_paginate @sitecities.has_event %><br />

我的sitecities控制器索引操作:

def index
  @sitecities = Sitecity.order("name asc").page(params[:page]).per_page(20)

这是我得到的错误:

ActionView::Template::Error (undefined method `total_pages' for #<Array:0x00000100d26008>):
21: 
22: <br />
23: 
24: <%= will_paginate @sitecities.germany.has_event %><br />
25: 
26: 
27: <h2> <%=t :cities_austria %> </h2>
app/views/sitecities/index.html.erb:24:in `_app_views_sitecities_index_html_erb___1333285971746927117_2155045900'
app/controllers/sitecities_controller.rb:11:in `index'

1 个答案:

答案 0 :(得分:0)

尝试添加

require 'will_paginate/array'

导致问题的代码之前,或者在应用程序控制器中

修改

您还可以尝试将控制器操作更改为:

def index
  @sitecities = Sitecity.order("name asc").paginate(:page => params[:page],
                                                    :per_page => 20)
end

确保您拥有最新版本的will_paginate