gpt4 book ai didi

ruby-on-rails - 将Rails 2.2.2升级到2.3.5后的未定义方法“total_entries”

转载 作者:行者123 更新时间:2023-12-04 18:26:33 26 4
gpt4 key购买 nike

我正在将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,因为我得到了一个未定义的方法调用。

我不喜欢这样的事实,因为它必须在多个位置使用 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

发生此错误的另一种可能是,我在Ruby 1.8.7和Rails 2.2.2中使用了Ruby,而现在在Ruby 1.9.1和Rails 2.3.5中使用了。 1.8.7和1.9.1之间是否有任何重大更改可以防止ActiveRecord发现无法运行之后阻止该块?

最佳答案

在Rails 2.3.5中,find(:all,...)调用将返回一个Array,通常这些数组没有与之关联的任何自定义方法,就像您可能通过作用域获得的那样。将块传递给查找调用也有些不规律,这可能是问题的一部分。

您可以通过创建一个查找所需内容的范围来解决此问题:

class Route < ActiveRecord::Base
named_scope :with_ids, lambda { |*ids| {
:conditions => { :id => ids.flatten }
}}
end


然后您可以使用范围:

@routes = Route.with_ids(params[:id])

关于ruby-on-rails - 将Rails 2.2.2升级到2.3.5后的未定义方法“total_entries”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2850294/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com