2015-07-04 2 views
0

Я в настоящее время объем:Поиск подстроки в двух столбцах

scope :named,->(query) do 
    where("(first_name || last_name) ~* ?", Regexp.escape(query || "a default string to prevent Regexp.escape(nil) errors")) 
end 

Это работает, когда first_name или last_name равна нулю, за исключением. Как найти эти столбцы, если один из столбцов равен нулю?

ответ

0

Я думаю, вы можете попробовать что-то вроде этого:

scope :named,->(query) do 
    where("first_name IS NOT NULL OR last_name IS NOT NULL AND (first_name || last_name) ~* ?", Regexp.escape(query || "a default string to prevent Regexp.escape(nil) errors")) 
end 
0

Это основная сфера для поиска имени, он обрабатывает поиск «только first_name», «last_name только» или поиск полной имя.

Если вы разделили запрос на массив, вы можете захватить первый и последний из массива и не имеет значения, является ли запрос длиной один или два.

Вы могли бы заменить раскол с регулярным выражением, если это необходимо

Вы могли бы, очевидно, расширить на этом (например, без учета регистра, упорядочивание), но дает основную идею.

Также обрабатывает запрос nil по умолчанию на пустую строку, если полоса выходит из строя.

scope :named,->(query) do 
    query.strip! rescue query = "" 
    query_words = query.split(' ') 
    where(["first_name LIKE ? OR last_name LIKE ?", "#{query_words.first}%", "#{query_words.last}%"]) 
end 

Надеется, что это помогает