2015-04-15 3 views
2

У меня возникла проблема с формой поиска, которая ищет несколько слов.Функция поиска для поиска нескольких слов

У меня есть эта функция в моей модели. Во-первых, я ищу таблицу KeyWords для иностранных идентификаторов, которые мне нужны для поиска в таблице библиотеки.

Это работает нормально, когда я ищу одно слово в моей таблице KeyWords, но я не знаю, как искать несколько слов, учитывая, что каждое из этих слов вернет группу идентификаторов. Я не знаю, как свернуть их вместе, чтобы искать в библиотеке.

Это моя функция поиска в моей модели библиотеки:

def self.search(search) 
    if search 
     where("id in (?)", KeyWords.where("word like ?", "%#{search}%").pluck(:library_id)) 
    else 
     all 
    end 
end 

То, что я пытался сделать что-то вроде spliting поиска параметров, и для каждого слова есть, поиск key_words:

#  array = Array.new 
#  key_words = search.to_s.split(" ") 
#  key_words.count.times do |i| 
#   ids[i] = PalabrasClave.where("palabra like ?", "%#{key_words[i]}%").pluck(:daw_mate_acad_id) 
#  end 
#  where("id in (?)", ids.flatten.uniq) 

но это не работает. Я думал, что поиск дал мне массив идентификаторов, которые я мог позже свернуть вместе с методом join, но, к сожалению, это не работает. Есть идеи?

+0

Что вы имеете в виду, говоря, что не работает? Пожалуйста, дайте некоторую информацию об этом, не сработает ли она или что? –

+0

он не работает, он не приносит массив идентификаторов, которые будут найдены позже в библиотеке, при каждом обычном поиске приносит супер случайное число, подобное 15 .... – fr3d0

+0

Я добавил .flatten.uniq, и теперь он ищет все элементы в библиотеке, даже если я ищу одно слово .... должно быть что-то не так с логикой, я думаю – fr3d0

ответ

2

Я звонил в array = Array.new, когда я должен был инициализацией ids = Array.new:

ids = Array.new 
     key_words = search.to_s.split(" ") 
     key_words.count.times do |i| 
      ids[i] = PalabrasClave.where("palabra like ?", "%#{key_words[i]}%").pluck(:daw_mate_acad_id) 
     end 
     where("id in (?)", ids.flatten.uniq) 
+0

Добро пожаловать. Пожалуйста, не используйте восклицательные знаки («!»), Чтобы прервать все ваши предложения. Это эквивалентно крику, бегущему вокруг и ударам вместе. Также, пожалуйста, найдите время, чтобы использовать правильную капитализацию для «I». Stack Overflow - это справочник по проблемам программирования, поэтому рассмотрите свой вопрос и записи, которые будут написаны для справочника. –

+0

Вместо использования 'Array.new', идиоматично просто использовать' [] ', если нам не нужны некоторые специальные поведения' Array.new'. –

+1

ОК, я извиняюсь, что я новичок в переполнении стека .... не повторюсь, кричащая вещь, которую я имею в виду .... – fr3d0

Смежные вопросы