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 に答える