Mongoid:查找多个父文档的所有子文档

时间:2013-07-22 01:11:29

标签: ruby-on-rails mongoid kaminari

我在Rails 3.2.13应用程序中有以下两个模型:

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

locations_controller.rb中,我有这种搜索方法:

def search
  @results = Kaminari.paginate_array(Location.find_by_keyword(params[:keyword])).page(params[:page]).per(30)
end

使用mongoid_search gem,我可以在Organization和Location模型的所有字段中查找关键字(搜索词),并获取匹配的所有组织:

orgs = Organization.full_text_search(keyword)

但我想要的是从搜索结果中返回属于组织的所有位置。我能够做到这一点的唯一方法是迭代每个组织,然后将其位置推送到数组,然后返回展平的数组。为了使控制器代码工作,我不得不使用Kaminari的paginate_array方法。

我的问题是,有没有更好的方法可以在不使用paginate_array方法的情况下获得相同的结果?

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用organization_id.in

@locations = Location.where(:organization_id.in => orgs.map(&:id))