0

在这里,我在模型中有搜索操作

def self.search(search)
    if search
       self.or({date: /#{Regexp.escape(search)}/i}})
    else
       scoped
    end
  end

现在它工作正常我也想添加对资产字段的搜索,但我有关系

 has_and_belongs_to_many :assets,:class_name => 'Asset'

“asset_ids”:[ObjectId(“5093a6996d7ab80e41000008”)]

我也想搜索资产。

 self.or({date: /#{Regexp.escape(search)}/i},{asset.name: /#{Regexp.escape(search)}/i})

现在像这种格式一样,我也必须搜索资产名称。但这是错误的查询。任何的想法?由于资产 ID 通过资产 ID 在这里,我想搜索资产名称。这怎么可能?

4

1 回答 1

1

查看 mauriciozaffari 的 mongoid_search gem。它应该为您提供更完整的搜索选项。它应该能够搜索关系。我也理解它会拆分由空格进行的搜索,因此您将进行更彻底的搜索,请在此处查看

希望能帮助到你。

编辑:

我自己并没有真正使用过它,但据我所知,您需要采取以下步骤:>/p?

1)在你的gemfile中安装gem gem 'mongoid_search' (除非你使用mongoid 2.xx,在这种情况下将gem锁定在0.2.8)

2)从您要搜索的模型中添加

    class Product
      include Mongoid::Document
      include Mongoid::Search
      field :brand
      field :name

      has_many   :tags
      belongs_to :category

      search_in :brand, :name, :tags => :name, :category => :name
    end

    class Tag
      include Mongoid::Document
      field :name

      belongs_to :product
    end

    class Category
      include Mongoid::Document
      field :name

      has_many :products
    end

所以,据我所知,你在这里所说的基本上是;我有一个模型Product,它有字段brandname. Product可以有很多Tags并且可以有很多产品附加到一个Category. 然后你在产品模型中导入Mongoid::Search,定义你想要搜索的字段:Product fields -> brand and name也通过链接has many搜索name字段Tags并搜索name字段和我认为Category的模型!.

然后从这里您将能够调用:

Product.full_text_search("value")

它将搜索您的产品型号,name还有brand一些全文搜索选项,您应该从我放在上面链接中的 README.md 中查看它们。我认为最相关的是 relevant_search我认为允许您搜索模型关联

同样,我还没有使用过这个 gem,但这只是我从 README.md 中收集到的

于 2013-03-06T10:57:07.110 回答