2010-05-17 9 views
3

2.2.2에서 2.3.5로 Rails 애플리케이션을 업그레이드 중입니다. 유일한 나머지 오류는 jqgrid를 만들기 위해 total_entries을 호출 할 때 발생합니다.Rails 2.2.2에서 2.3.5로 업그레이드 한 후 정의되지 않은 메소드 'total_entries'

오류 :

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을 사용하면 이전 코드보다 덜 건조하다는 사실을 좋아하지 않습니다. Rails 2.3.5, will_paginate 및 다람쥐를 사용하여 더 좋은 방법이 있습니까?

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

이 오류의 또 다른 가능성은 내가 레일 2.2.2와 루비 1.8.7를 사용하고 있었다 지금은 루비를 사용하고 있다고 할 수있다 레일 2.3.5과 한 묶음. 1.8.7과 1.9.1 사이에 ActiveRecord 찾기가 실행되지 않은 후에 블록을 차단하는 주요 변경 사항이 있습니까?

답변

1

Rails 2.3.5에서 find (: all, ...) 호출은 배열을 반환하고 일반적으로 범위와 관련된 사용자 정의 메서드가 없습니다. 찾기 호출에 블록을 전달하는 것도 약간 불규칙하며 문제의 일부일 수 있습니다.

당신은 당신이 원하는 것을 찾아 그 범위를 만들어이 문제를 해결 할 수 있습니다 :

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

찾기 (: 모든) 레일에

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

그럼 대신 범위를 사용할 수 있습니다 2.2.2는 또한 Array를 반환합니다. 2.3.5와 비공개 사이에 알려진 비 호환성이 있습니까? – Trevor

+1

정규적인 형태로 사용되는 경우 특정 문제에 관해서는 알지 못합니다. 이 경우 @ route.length를 대신 사용 하시겠습니까? – tadman