Ruby On Rails in UA Icon_home Главная Add to bookmarks Translate translate Profile Войти
Регистрация Форум Блоги Пользователи Ресурсы Список джемов      Поиск   
Arrow_leftНазад в блог

Построение запросов с помощью conditions_fu

Date2008-08-20 UserRoman V. Babenko Commentкоментарии 2

Уже давно хотел избавиться от упоминания в запросах 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 лет или чье имя заканчивается на "упкин"
Подробней и перечень операторов можно посомтреть тут rubyhammer.com/articles/2008-08-20-182530-conditions_fu-postroitel-zaprosov
2 коментариев

Вместо OR можно использовать IN

User.find(:all, :conditions => ‘id IN (?)’, [1,2,40]])

Вот ты и получишь IN стандартными средставми

Q: Уже давно хотел избавиться от упоминания в запросах sql конструкций.

SQL оператор не есть стандартным средством. Он специфичен для конкретной БД.

User.all :conditions => {:id.in => [1,2,40]}

Так компактней, без кавычек и вопросов.

метод all объединяет условия поиска по AND (полное совпадение с условием)

метод any объединяет условия по OR(частичное совпадение)

Новый коментарий
зарегистрируйтесь для добавления сообщений
используй формат RedCloth
Ключевые слова:
Гости: 235 Онлайн: 0
Rambler's Top100
О проекте по всем вопросам обращайтесь на support
Rubyclub.com.ua Copyright © 2007 - 2008