1

モデルとそれに関連するタグに対して複数列の検索を実行しようとしています。私はmetawhereを使用しており、これにはタグ付け可能として機能します。基本的に、タイトルと本文に名前の付いたタグが一定量あるモデルがあります。このクエリをmetawhereで設定しようとしましたが、モデルのタグに結合しようとしても結果が返されません。次のPostモデルを検索するために使用されている「str」という名前の変数があります...

Post.where(:title.matches % '#{str}%' | :body.matches % '#{str}%' | {:tags => [:name.matches % '#{str}%']}).joins(:tags)

次のSQLを生成します。

=> "SELECT `posts`.* FROM `posts` INNER JOIN `taggings` ON `posts`.`id` = `taggings`.`taggable_id` AND `taggings`.`taggable_type` = 'Post' INNER JOIN `tags` ON 'taggings.tagger_id IS NULL AND taggings.context = \\'tags\\'' WHERE (((`posts`.`title` LIKE '\#{str}%' OR `posts`.`body` LIKE '\#{str}%') OR `tags`.`name` LIKE '\#{str}%'))"

誰かがこれで私を正しい方向に向けることができますか?どんな助けでも大歓迎です。

4

1 に答える 1

0

試してください:(演算子のオーバーロードが有効になっていると仮定して)

.where((:title =~ str) | (:body =~ str) | {:tags => [:name =~ str]})
于 2011-02-09T14:38:42.727 に答える