Допустим, у меня есть форма, где пользователи могут искать людей, чье имя начинается с определенной строки name
, например, "Mi" найдет "Mike" и "Miguel". Я бы, вероятно, создал бы оператор find следующим образом:
find(:all, :conditions => ['name LIKE ?', "#{name}%"])
Допустим, форма также имеет два необязательных поля, hair_color
и eye_color
, которые можно использовать для дальнейшей фильтрации результатов. Игнорируя часть имени в запросе, оператор поиска для людей, которые могут принять произвольное количество необязательных параметров, может выглядеть так:
find(:all, :conditions => { params[:person] })
Который для моих двух дополнительных параметров будет вести себя как эквивалент этого:
find(:all, :conditions => { :hair_color => hair_color, :eye_color => eye_color })
Что я не могу понять, так это как объединить эти два вида запросов, где обязательное поле «имя» применяется к приведенному выше условию «нравится» и необязательные параметры hair_color
и eye_color
возможно, другие) могут быть добавлены для дальнейшей фильтрации результатов.
Я, конечно, могу создать строку запроса для этого, но я чувствую, что должен быть "путь рельсов", который был бы более элегантным. Как я могу объединить обязательные параметры связывания с необязательными параметрами?