Я пытаюсь разбить каждое слово во входе и использовать в нем свой поисковый запрос.
Мой текущий поиск использует в моем контроллере следующее:
@stock_search = StockItem.search(params[:search])
.select("stock_items.id,stock_items.product_code, stock_items.desc1, stock_items.cost_sop, stock_items.price, stock_items.price1, stock_items.price2, stock_items.price3, stock_items.price4, stock_items.price5, stock_items.del_price, stock_items.del_price1, stock_items.del_price2, stock_items.del_price3, stock_items.del_price4, stock_items.del_price5, stock_items.qty_free, suppliers.name, max(a.date_invoice) as date_last")
.joins("INNER JOIN suppliers ON supplierscompany = stock_items.company and stock_items.main_supplier = suppliers.supplier_code")
.joins("LEFT outer JOIN invoice_details a ON stock_items.company = a.company
and stock_items.product_code = a.part and a.del_account = '#{@customer.account}'")
.where("stock_items.depot = '#{@customer.depot}'")
.group("stock_items.id,stock_items.product_code, stock_items.desc1, stock_items.cost_sop,
stock_items.price, stock_items.price1, stock_items.price2, stock_items.price3, stock_items.price4, stock_items.price5, stock_items.del_price, stock_items.del_price1, stock_items.del_price2, stock_items.del_price3, stock_items.del_price4,
stock_items.del_price5, stock_items.qty_free,
suppliers.name")
.page(params[:page]).per(10)
и моя модель использует следующее
def self.search(search)
if search
where('stock_items.depot = ? and (lower(product_code) like lower(?) OR lower(desc1) like lower(?) or lower(main_mpn) like lower(?) or lower(search_keywords) like lower(?))',"01", "%#{search.downcase}%","%#{search.downcase}%","%#{search.downcase}%", "%#{search.downcase}%")
else
where('product_code=?','x')
end
end
Я пытаюсь изменить свою модель так, чтобы она перебирала каждое слово в моей форме поиска и создавала строку где, но я не могупохоже, что он не работает, вместо этого кажется (в журнале разработчиков) выполнять отдельные запросы для каждого слова, но затем не возвращать результатов в представлении.
Вот что у меня есть
def self.search(search)
if search
str = ""
search.split.each do |s|
a = where("(lower(product_code) like lower(?) OR lower(desc1) like lower(?) or lower(main_mpn) like lower(?) or lower(search_keywords) like lower(?))", "%#{s}%", "%#{s}%", "%#{s}%", "%#{s}%")
str = (str + a)
end
return str
else
where('product_code=?','x')
end
end
Буду признателен за любую помощь в правильном направлении.
Спасибо