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 に答える