4

Kaminariを使用してRailsアプリにページネーションを適用しようとしています。Railscastエピソード#37に基づいた簡単な検索フォームも組み込んでいます。カミナリページを適用しようとすると、メソッドごとに「未定義のメソッドページ」というエラーが発生します。以下は私が使用しているコードです。

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 %>

ページネーションを削除すると、検索は正常に機能します。検索を削除すると、ページネーションは正常に機能します。両方を使用できず、コードが適切に機能しているようには見えません。私のコードに、これが正しく機能しない原因となっている何かが欠けているかどうかを教えてください。

4

1 に答える 1

9

あなたの場合、 ActiveRecord::Relationオブジェクトではなく検索メソッドから配列オブジェクトを返しています。

 find(:all, conditions: ...) # find method will return an 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

配列を使用したカミナリのページ付けhttps://github.com/amatsuda/kaminari#paginating-a-generic-array-object

ActiveRecord :: Relationオブジェクトの場合は、このhttp://railscasts.com/episodes/239-activerecord-relation-walkthroughをチェックアウトしてください

于 2012-11-23T17:40:43.880 に答える