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) addで検索したいモデルから

    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フィールドbrandとを持つモデルがありますname ProductにはTags多くの製品を含めることができ、多くの製品を に関連付けることができますCategory。次に、製品モデルにインポートMongoid::Searchし、検索するフィールドを定義します。Product fields -> brand and nameリンクからフィールドをhas many検索し、フィールドとモデルを検索すると思います! .nameTagsnameCategory

次に、ここから次のように呼び出すことができます。

Product.full_text_search("value")

上記のリンクにある README.md から調べる必要がある全文検索のオプションもいくつかありnameます。brand最も関連性の高いものは relevant_search、モデルの関連付けを検索できると思います

繰り返しますが、私はまだこの宝石を使用していませんが、これは私が README.md から集めたものです

于 2013-03-06T10:57:07.110 に答える