2011-07-21 3 views
1

Quand j'appelle paginate avec Kaminari sur une collection de documents intégrés que je reçois l'erreur suivante:rails 3 avec Kaminari sur paginations documents intégrés MongoId

(Access to the collection for Document is not allowed since it is an embedded document, please access a collection from the root document.): 

Toute idée sur la façon dont je peux résoudre ce problème? J'ai installé kaminari comme une gemme.

Alex

+0

Quelle est la version de mongo? – Anatoly

+0

Non pertinent pour la programmation intégrée. Retagé. –

Répondre

2

Vous avez juste besoin d'accéder à la collection à travers l'objet parent. Par exemple, étant donné les modèles suivants:

class User 
    include Mongoid::Document 
    embeds_many :bookmarks 
end 

class Bookmark 
    include Mongoid::Document 
    embedded_in :user 
end 

Puis pagine un vous faire de l'utilisateur étant donné les marque-pages:

@user.bookmarks.page(params[:page]) 
+0

J'ai essayé cela, mais cela ne fonctionne pas pour moi: variable locale indéfinie ou méthode 'page 'pour # <# : 0x10e37fe88>, mes modèles est" Document "intégré dans" Projet " – Alex

+0

Bizarre. J'ai testé cela sur un projet sur lequel je travaille en ce moment - et ça fonctionne vraiment. On dirait que vous pourriez avoir d'autres problèmes, car il semble appeler 'Page' sur un' Class' - pas votre collection 'Critères'. – theTRON

1

Je trouve cette question Kaminari: https://github.com/amatsuda/kaminari/issues/89

Je fourchue il, et l'a fixé en suivant la solution fournie par spatrik. Je ne suis pas sûr à 100% que cela fonctionnera dans tous les cas et que cette solution ne présente aucun inconvénient. Mais pour le moment cela fonctionne exactement comme prévu.

Alex

0

Avec l'exemple précédent theTRON:

class User 
    include Mongoid::Document 
    embeds_many :bookmarks 
end 

class Bookmark 
    include Mongoid::Document 
    field :created_at, :type => DateTime 

    embedded_in :user 
end 

ce qui suit, vous obtiendrez l'erreur que vous avez décrit dans votre message:

@user.bookmarks.desc(:created_at).page(params[:page]) 

tandis que le nex une volonté fonctionne très bien:

@user.bookmarks.page(params[:page]).desc(:created_at) 

J'espère ça aide.

Questions connexes