2016-09-27 5 views
0

ネストされた検索を実行していますが、常に正しい情報を返しますが、各エントリの3つのコピーを返します!Railsデータベースネスト検索混乱

ユーザー名、名、趣味、または趣味に基づいてユーザーを検索したいと考えています。すべてのユーザーは、ゼロ、1つ、または多くの趣味を持っています。

これが私のクエリです:

def self.search(search) 
    query = "%#{search}%" 
    if search 
    joins(:hobbies) 
     .where("user_name like ? or first_name like ? or hobbies.name like ? or hobbies.type like ?", query, query, query, query) 
    else 
    self.all 
    end 
end 

私は趣味の名前や趣味の種類で検索する場合は、私が正しい応答を取得します。

私はユーザー名またはファーストネームで検索すると、同じエントリの3つのクローンを取得します!!それはなぜそれをするのですか?

+1

'join 'の代わりに' includes'を使用したときに得られる結果は? – dp7

+0

それはうまくいった。しかしどうして? – ineedahero

+0

'includes'はLeft Out Joinを実行します。したがって、一致する条件ごとに1つの行のみが結果として返されます。私は答えとしてそれを拡張しました。 – dp7

答えて

0

joinsの代わりにincludesを使用する必要があります。

includesはLEFT OUTERはjoins一方インナーをJOINなるJOINなります。