2016-09-27 3 views
0

Я делаю вложенный поиск, и, хотя он всегда возвращает правильную информацию, он возвращает три копии каждой записи !!Rails Database Вложенный поиск Confusion

Я хочу искать пользователей на основе их имени пользователя, имени, хобби или типа хобби. У каждого пользователя есть нулевое, одно или много хобби.

Это мой запрос:

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 

Если искать по названию хобби или вид хобби, я получаю правильный ответ.

Но если я ищу по имени пользователя или имени, я получаю три клона одной и той же записи! Почему это так?

+1

Какой результат вы получаете, когда используете 'includes' вместо' joins'? – dp7

+0

Хорошо, что сработало. Но как получилось? – ineedahero

+0

'includes' делает Left Out Join, поэтому для каждого условия соответствия в качестве результата будет возвращена только одна строка. Я распространил его как ответ. – dp7

ответ

0

Вы должны использовать includes вместо joins.

includes делает LEFT OUTER JOIN, тогда как joins делает INNER JOIN.