je les 2 modèles suivants dans un Rails 3.2.13 application:MongoId: trouver tous les enfants documents de plusieurs documents parents
class Organization
include Mongoid::Document
include Mongoid::Search
field :name
field :description
has_many :locations
search_in :name, :description, :locations => [:name, :description, :keywords]
end
class Location
include Mongoid::Document
field :name
field :description
field :keywords, type: Array
belongs_to :organization
def self.find_by_keyword(keyword)
locs = []
orgs = Organization.full_text_search(keyword)
orgs.each { |org| locs.push(org.locations) }
locs.flatten
end
end
En locations_controller.rb
, j'ai cette méthode de recherche:
def search
@results = Kaminari.paginate_array(Location.find_by_keyword(params[:keyword])).page(params[:page]).per(30)
end
En utilisant le mongoid_search
gem, je peux chercher le mot-clé (le terme de recherche) dans tous les champs pour les modèles Organisation et Location, et obtenir toutes les organisations qui correspondent:
orgs = Organization.full_text_search(keyword)
Mais ce que je veux, c'est de retourner tous les emplacements qui appartiennent aux organisations du résultat de la recherche. La seule façon que j'ai pu faire était de parcourir chaque organisation, puis pousser ses emplacements à un tableau, puis retourner le tableau aplati. Pour que le code du contrôleur fonctionne, j'ai dû utiliser la méthode paginate_array
de Kaminari.
Ma question est, y at-il un meilleur moyen d'atteindre le même résultat sans utiliser la méthode paginate_array
?
Merci!
Merci! C'est beaucoup plus concis. – monfresh