如何更好地写出这个问题?Ruby Sequel链式调用 OR

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

有没有更好的方法来链接或条件?
2个回答

17
 DB[:categories_description_old].
   filter({:categories_description=>'',
           :categories_name=>'',
           :categories_heading_title=>''}.sql_or)

3
您可以这样做:
conditions.inject(table_categories_description_old.filter(true)){|acc, cond|
  acc.or(cond => '')
}

但在像这样已经思考好SQL查询的情况下,我发现更容易的方法是输入整个WHERE条件,并使用Sequel来清理我的查询参数。


应该使用 filter(false),否则条件不会被检查。 - brauliobo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接