Уже давно хотел избавиться от упоминания в запросах sql конструкций.
Но построение через хеши условий для поиска в нынейней версии RoR(2.1) к сожалению не возможно.
Такие запросы типа: Строка по маске, больше чем, меньше чем, больше, находиться в диапазоне, не находиться в диапазоне - построить с помощью хешей невозможно.
Объединение условий по OR опять же сводилось к написанию SQL.
Плагин conditions_fu расширяет возможности ActiveRecord::Base#find методами позволяющими решить вышеуказнные проблемы.
Установка
$ script/plugin install git://github.com/xgamerx/conditions_fu.git Использование
Person.all(:conditions => { :age.gt => 30, :name.like => "%упкин" })
найдет всех кто заканчивается на "упкин" старше 30 лет
Person.any(:conditions => { :age.gt => 30, :name.like => Person.all(:conditions => { :age.gt => 30, :name.like => "%name%" })
})
найдет всех старше 30 лет или чье имя заканчивается на "упкин"
Подробней и перечень операторов можно посомтреть тут conditions_fu-postroitel-zaprosov">rubyhammer.com/articles/2008-08-20-182530-conditions_fu-postroitel-zaprosov