0

多対多の関係でアイテムをタグに接続する結合テーブルがあります。検索を行うと、名前またはタグ名が一致するすべてのアイテムが含まれます。

私がする時:

    search = "one"
    Item.all(:conditions=>["items.name LIKE ?", "%#{search}%"]);

「one」という単語を含む結果のアイテムに乗ります。

それから私がするとき:

    search = "one"
    Item.all(:joins=>[:tags], :conditions=>["items.name LIKE ?", "%#{search}%"]);

空のセットを取得します。

条件に一致する 1 つの結果が返されるのではなく、アクティブなレコードが空のセットを返すのはなぜですか? そして、私が探している結果をどのように得ることができますか?

4

1 に答える 1

0

理解した。私のクエリで必要なもの:joins=>[:tags]が. 私の問題の解決策は、INNER JOINOUTER JOIN

    search = "one"
    Item.all(
        :joins=>['LEFT OUTER JOIN "tags_items" ON "tags_items"."webservice_id" = "webservices"."id" LEFT OUTER JOIN "tags" ON "tags"."id" = "tags_items"."tag_id"'], 
        :conditions=>["items.name LIKE ?", "%#{search}%"]
    )
于 2012-12-04T05:11:55.783 に答える