我正在将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
之后使用的块来使其工作。我还必须移动squirrel插件使用的order_by
,因为我正在获取一个未定义的方法调用。
我不喜欢这样的事实,即由于必须在多个位置使用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找不到后阻塞?
答案 0 :(得分:1)
在Rails 2.3.5中,find(:all,...)调用将返回一个数组,并且通常这些调用没有任何与之关联的自定义方法,就像使用范围一样。将块传递给查找调用也有点不规则,可能是问题的一部分。
您可以通过创建找到所需内容的范围来解决此问题:
class Route < ActiveRecord::Base
named_scope :with_ids, lambda { |*ids| {
:conditions => { :id => ids.flatten }
}}
end
然后你可以改用范围:
@routes = Route.with_ids(params[:id])