0

前几天我们突然遇到了这个问题。我们的 Rails 应用程序正在使用 will_paginate,我在控制器中将其定义如下:

# contacts_controller.rb
def index
  # ...
  @search = @current_user.contacts.search(params[:search])
  @contacts = @search.all.paginate({:page => params[:page], :per_page => 20})
end

开发和登台(这是一个登台盒而不是生产)都指向同一个数据库。上面的代码在我的本地机器上运行良好,但是在暂存时出现以下错误:

undefined method 'to_i' for {:per_page=>20, :page=>nil}:Hash

两台计算机上的代码相同。知道为什么它在一个上运行良好而不在另一个上运行吗?

编辑:在登台服务器上,我正在使用插件,而在本地机器上,我正在使用 gem,但是我删除了插件并安装了 gem,现在我收到一条错误消息:

uninitialized constant Array::WillPaginate


显然它仍然没有解决..在登台服务器上进行部署后,我再次收到该错误,尽管它之前工作正常。有人对此有任何想法吗?我完全一无所知。

4

2 回答 2

0

如果页面参数为 nil,则默认值为 1 通常是一个好主意。这涵盖了没有传递页面的 url 参数的情况。在传递参数的地方,它将代替默认值:

{:page => params[:page] || 1, :per_page => 20})

完整示例:

# contacts_controller.rb
def index
  # ...
  @search = @current_user.contacts.search(params[:search])
  @contacts = @search.all.paginate({:page => params[:page] || 1, :per_page => 20})
end
于 2009-11-24T15:15:35.803 回答
0

好吧,我似乎已经解决了它:

require 'will_paginate'卸载插件并安装 gem 后,我必须显式输入环境。但是,我仍然不确定为什么该插件在我的本地机器上运行,但在暂存时却没有。

于 2009-11-24T15:17:59.323 回答