Я обновляю приложение 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
Есть идеи? Спасибо!
EDIT
Я могу заставить его работать, удалив блок, использованный после find
. Мне также пришлось переместить order_by
, используемый плагином squirrel, поскольку я получал неопределенный вызов метода для него.
Мне не нравится тот факт, что это менее СУХОЙ, чем предыдущий код, из-за необходимости использовать conditions
в более чем одном месте. Есть ли лучший способ сделать это с 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
Другая возможность для этой ошибки может заключаться в том, что я использовал Ruby 1.8.7 с Rails 2.2.2 и теперь использую Ruby 1.9.1 с Rails 2.3.5. Были ли какие-либо серьезные изменения между 1.8.7 и 1.9.1, которые могли бы помешать блоку после того, как ActiveRecord обнаружил, что он не работает?