Rails アプリケーションを 2.2.2 から 2.3.5 にアップグレードしています。唯一残っているエラーはtotal_entries
、jqgrid を作成するために呼び出すときです。
エラー:
NoMethodError (undefined method `total_entries' for #<Array:0xbbe9ab0>)
コードスニペット:
@route = Route.find(
:all,
:conditions => "id in (#{params[:id]})"
) {
if params[:page].present? then
paginate :page => params[:page], :per_page => params[:rows]
order_by "#{params[:sidx]} #{params[:sord]}"
end
}
respond_to do |format|
format.html # show.html.erb
format.xml { render :xml => @route }
format.json { render :json => @route }
format.jgrid {
render :json => @route.to_jqgrid_json(
[
:id, :name
],
params[:page],
params[:rows],
@route.total_entries
)
}
end
何か案は?ありがとう!
編集
の後に使用されるブロックを削除することで、機能させることができfind
ます。order_by
また、未定義のメソッド呼び出しを取得していたため、squirrel プラグインで使用されるを移動する必要がありました。
conditions
複数の場所で使用する必要があるため、これが以前のコードよりも DRY ではないという事実は気に入りません。Rails 2.3.5、will_paginate、および squirrel でこれを行うより良い方法はありますか?
if params[:page].present? then
@route = Route.paginate :conditions => "id in (#{params[:id]})", :page => params[:page], :per_page => params[:rows], :order => "`#{params[:sidx]}` #{params[:sord]}"
else
@route = Route.find(:all, :conditions => "id in (#{params[:id]})")
end
編集2
このエラーの別の可能性は、Rails 2.2.2 で Ruby 1.8.7 を使用していて、現在 Rails 2.3.5 で Ruby 1.9.1 を使用している可能性があります。1.8.7 と 1.9.1 の間で、ActiveRecord の検出後にブロックが実行されないようにする大きな変更はありましたか?