2

Post次のスコープを持つクラスがあります。

scope :by_tag, ->(tag){ where(:desc => /##{Regexp.escape(tag)}/) }

1つのタグで非常にうまく機能しますが、さまざまなタグで機能させることはできません。

例:#railsAND#regexpでタグ付けされた投稿を取得することはできません。

基準ユニオンを使用すると、#railsまたは#regexpでタグ付けされた投稿を返すようにできます。

どうすればそれを機能させることができますか?ところで、私はモンゴイドを使用しています。

前もって感謝します。


ORではないただの泉。何が起こるかというと、2回目にby_tagを呼び出すと、前の呼び出しが上書きされます。同じ物件だからだと思います。

誰かがこれを修正する方法を知っていますか?ありがとう

4

1 に答える 1

1

正規表現クエリは非常に遅い傾向があります。代わりに、タグの配列を格納し、を使用$inして配列をクエリします。

Mongoid2.xを使用する場合all_in

scope :by_tags, ->(*tags) { all_in(tags: *tags) }

Mongoid3ではallマージ戦略を使用します

scope :by_tags, ->(*tags) { all(tags: *tags) }
于 2012-10-17T11:35:14.510 に答える