我在 Rails 3.2.13 应用程序中有以下 2 个模型:
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,我可以在组织和位置模型的所有字段中查找关键字(搜索词),并获取所有匹配的组织:
orgs = Organization.full_text_search(keyword)
但我想要的是从搜索结果中返回属于组织的所有位置。我能够做到这一点的唯一方法是遍历每个组织,然后将其位置推送到数组,然后返回扁平数组。为了让控制器代码工作,我不得不使用 Kaminari 的paginate_array
方法。
我的问题是,有没有更好的方法可以在不使用该方法的情况下达到相同的结果paginate_array
?
谢谢!