2012-11-23 2 views
4

J'essaie d'appliquer la pagination à mon application rails en utilisant Kaminari. J'inclus également un formulaire de recherche simple basé sur le Railscast Episode #37. Quand j'essaye d'appliquer la page de kaminari et par des méthodes j'obtiens l'erreur 'la page de méthode non définie. Voici le code que j'utilise.Utilisation de la recherche simple avec Kaminari Pagination Gem

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

Lorsque je supprime la recherche Pagination fonctionne très bien. Lorsque je supprime la recherche, la pagination fonctionne correctement. Je ne peux pas sembler les utiliser tous les deux et avoir le code fonctionner correctement. S'il vous plaît aviser s'il y a quelque chose dans mon code qui me manque et qui ne fonctionne pas correctement.

Répondre

9

Dans votre cas, vous renvoyez l'objet tableau de la méthode de recherche non objet ActiveRecord :: Relation.

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

check Ajouter dans votre contrôleur,

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 

Kaminari avec une mise en page tableau https://github.com/amatsuda/kaminari#paginating-a-generic-array-object

pour objet ActiveRecord :: Relation, PayPal Ce http://railscasts.com/episodes/239-activerecord-relation-walkthrough

+0

qui l'a fait. Merci pour la réponse. – Aaron

+1

@Aaron Alors pourriez-vous accepter et upvote ma réponse? :) – Santosh

+0

Ce serait une meilleure réponse si elle avait l'explication ... "Donnez un poisson à un homme et vous le nourrissez pour une journée, apprenez à un homme à pêcher et vous le nourrissez toute sa vie." – Agush

Questions connexes