You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 23:20:44