2012-11-23 4 views
4

카미나리를 사용하여 레일 앱에 페이지 매김을 적용하려고합니다. 나는 또한 Railscast Episode #37을 기반으로 간단한 검색 양식을 통합하고 있습니다. kaminari 페이지와 메소드를 적용하려고하면 '정의되지 않은 메소드 페이지'오류가 발생합니다. 아래 코드는 제가 사용하고있는 코드입니다.Kaminari 페이지 네이션 보석으로 간단한 검색 사용

posts_controller.rb

def index 
    @posts = Post.search(params[:search]).page(params[:page]).per(2) 
end 

post.rb

def self.search(search) 
    if search 
    find(:all, conditions: ['title || body LIKE ?', "%#{search}%"], order: "created_at DESC") 
    else 
    find(:all) 
    end 
end 

index.html.erb

<%= paginate @posts %> 

나는 매김을 제거하면 검색이 잘 작동합니다. 검색을 제거하면 페이지 매김이 제대로 작동합니다. 난 그냥 둘 다 사용하고 제대로 코드 기능을 가지고있는 것처럼 보일 수 없습니다. 제 코드에 누락 된 부분이있어 제대로 작동하지 않는 경우 알려주십시오.

답변

9

귀하의 경우 검색 방법에서 ActiveRecord :: Relation 개체가 아닌 배열 개체가 반환됩니다. 컨트롤러에서

find(:all, conditions: ...) # find method will return an array object. 

추가 확인, 배열 액티브 :: 관계 개체에 대한 https://github.com/amatsuda/kaminari#paginating-a-generic-array-object

def index 
    @posts = Post.search(params[:search]) 
    if @posts.class == Array 
    @posts = Kaminari.paginate_array(@posts).page(params[:page]).per(10) 
    else 
    @posts = @posts.page(params[:page]).per(10) # if @posts is AR::Relation object 
    end 
end 

미나리의 페이지 매김은, 그것을 한이 http://railscasts.com/episodes/239-activerecord-relation-walkthrough

+0

체크 아웃. 응답 해 주셔서 감사합니다. – Aaron

+1

@Aaron 그럼 내 대답을 받아 들일 수 있니? :) – Santosh

+0

설명이 있다면 더 좋은 대답이 될 것입니다 ... "남자에게 물고기를주고 하루 동안 먹이십시오. 남자에게 고기를 가르치면 평생 먹여주십시오." – Agush

관련 문제