Ruby代码中使用的`~~*`运算符代表什么含义?
关于~~*的含义说明
你搜索Ruby语法找不到结果的核心原因是:~~*不是Ruby的操作符,而是PostgreSQL数据库的操作符,它被写在ActiveRecord的where方法的SQL片段中,属于数据库层面的语法,和Ruby本身无关。
具体作用
它是PostgreSQL中专用于大小写不敏感模糊匹配的别名,和标准SQL的对应关系如下:
~~等价于标准SQL的LIKE(大小写敏感的模糊匹配)~~*等价于标准SQL的ILIKE(大小写不敏感的模糊匹配)- 对应的否定形式为
!~~(等价NOT LIKE)、!~~*(等价NOT ILIKE)
你提供的代码逻辑
some_list.where("'#{@new_params[:email]}' ~~* name").any?
这段代码的实际执行逻辑是:将@new_params[:email]的取值作为左值,匹配数据表中name字段的模糊匹配规则,只要存在任意一条符合匹配规则的记录就返回true。
注意:你的写法存在SQL注入风险,直接将用户可控的参数拼接进SQL字符串会导致数据库被攻击的可能,建议改为参数绑定的写法:
some_list.where("? ~~* name", @new_params[:email]).any?
补充说明
你之前查到的Ruby文档中~操作符是Ruby原生的正则匹配语法,和此处SQL片段中的~~*完全是两个体系的语法,没有任何关联。
内容的提问来源于stack exchange,提问作者Brezzneff
相关产品推荐
相关产品推荐

