Как написать это лучше? Рубин Сиквел Цепочка ИЛИ - PullRequest
9 голосов
/ 15 ноября 2010

В SQL это должно выглядеть так:

SELECT * FROM `categories_description_old` WHERE ((`categories_description` = '') OR (`categories_name` = '') OR (`categories_heading_title` = ''))

Мое (некрасивое) решение:

conditions = [:categories_name, :categories_heading_title, :categories_description]
b = table_categories_description_old.filter(conditions.pop => "")
conditions.each do |m|
 b = b.or(m => "")
end

Есть ли лучшее решение для цепочки или условий?

Ответы [ 2 ]

16 голосов
/ 15 ноября 2010
 DB[:categories_description_old].
   filter({:categories_description=>'',
           :categories_name=>'',
           :categories_heading_title=>''}.sql_or)
3 голосов
/ 15 ноября 2010

Вы можете сделать что-то вроде:

conditions.inject(table_categories_description_old.filter(true)){|acc, cond|
  acc.or(cond => '')
}

Но в таких случаях, когда вы уже продумали SQL-запрос, мне проще просто ввести целое условие WHERE и использовать Sequel для очистки параметров моего запроса.

...