Я пытаюсь реализовать простую поисковую систему в приложении Rails5.Составить SQL-запросы
В принципе, у меня есть несколько полей в форме, и мне нужно получить все записи, соответствующие всем входным значениям. Обратите внимание, что все значения являются необязательными.
Значения, которые я могу найти, - name
, description
, created_at
.
Моя идея - создать предложение для каждого значения, а затем объединить их.
class EmployeeSearch < ApplicationRecord
self.table_name = 'employees'
def results
# MAGIC HAPPENS HERE
end
private
def table
Employee.arel_table
end
def name_condition
table[:name].eq(name)
end
def description_condition
table[:description].matches("%#{description}%") unless description.blank?
end
def created_at_condition
...
end
end
EmployeeSearch.new(name: 'John Doe', created_at: '01/01/2010')
Теперь, как я могу перебрать все условия в results
и цепи каждая из которых на пункте where
?
Я думал что-то вроде
methods.grep(/_condition$/).map { |c| where(send(c)) }
или подобного, но я не могу заставить его работать.
Любые предложения?
Thanks
То, что отсутствовало в моем решении, возвращало отношение. 'methods.grep (/ _ condition $ /). Inject (Employee) do | klass, condition | klass = klass.where (отправить (условие)) end' – macsig