如何在Ruby Sequel中设置数组包含值条件及操作符用法
修改后的函数代码
def get_categories_by_company_and_feature(company_id:, feature_id:) DB[:categories] .where(company_id: company_id) .join(:elements, category_id: :id) # 筛选filters数组包含指定feature_id的elements行 .where(Sequel[:elements][:filters].array_op.contains([feature_id])) .order(:category_name, :element_name) .select_all(:categories, :elements) .select_append( Sequel[:categories][:user_active].as(:category_user_active), Sequel[:categories][:id].as(:category_id), Sequel[:elements][:id].as(:element_id) ) end
数组列筛选的实现说明
Sequel中针对数组类型的列,需要先通过array_op方法将列对象转换为数组操作专用对象,之后就能调用contains方法完成数组包含检查。这里Sequel[:elements][:filters]获取elements表的filters列,调用array_op后传入[feature_id]到contains方法,就能筛选出该数组列包含指定feature_id的行。注意contains方法的参数必须是数组,即使只检查单个元素也要包裹成数组形式。
Sequel列表达式对象的常用操作符
对于Sequel[:categories][:user_active]这类Sequel列表达式对象,常用操作符包括:
- 比较操作符:
==、!=、<、>、<=、>=,用于数值、布尔值、字符串等的比较,例如Sequel[:categories][:user_active] == true - 逻辑操作符:
&(逻辑与)、|(逻辑或)、~(逻辑非),用于组合多个条件,例如(Sequel[:categories][:user_active] == true) & (Sequel[:categories][:name] =~ 'admin%') - 模糊匹配:
=~(LIKE)、!~(NOT LIKE)、=~*(ILIKE,不区分大小写),用于字符串模糊查询 - 空值检查:
is、is_not,用于判断列值是否为NULL,例如Sequel[:categories][:user_active].is(nil) - 范围与集合检查:
in、not_in,判断列值是否在指定集合内,例如Sequel[:categories][:id].in([1, 3, 5]) - 数学运算:
+、-、*、/等,用于数值列的运算,例如Sequel[:categories][:sort_order] + 2
内容的提问来源于stack exchange,提问作者Fer Carmona
相关产品推荐
相关产品推荐

