9

在 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

是否有更好的解决方案来链接或条件?

4

2 回答 2

16
 DB[:categories_description_old].
   filter({:categories_description=>'',
           :categories_name=>'',
           :categories_heading_title=>''}.sql_or)
于 2010-11-15T18:21:21.200 回答
3

您可以执行以下操作:

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

但是在这种情况下,当您已经考虑过 SQL 查询时,我发现只输入整个 WHERE 条件并使用 Sequel 来清理我的查询参数会更容易。

于 2010-11-15T16:06:52.880 回答