运算符不存在:字符变化[]

时间:2017-06-17 16:28:37

标签: ruby-on-rails postgresql

在我的用户模型上运行一个简单的语句,但不断获得有关运算符的错误,这些错误与任何给定的参数都不匹配。我以前从来没有碰到这样的事情,也不知道如何处理它。我知道我必须添加类型转换,但在我的POSTGRES数据库中,列关键字是数组类型。

@users = User.where("keywords ILIKE ?", "%#{params[:keywords]}%")

你是如何处理的?

确切的错误消息:

ActionView::Template::Error (PG::SyntaxError: ERROR:  syntax error at or near "ANY"
LINE 1: SELECT "users".* FROM "users" WHERE (ANY(keywords) LIKE '%an...
                                         ^
: SELECT "users".* FROM "users" WHERE (ANY(keywords) LIKE '%angularjs%')):

谢谢!

1 个答案:

答案 0 :(得分:2)

如果要搜索postgres数组,请使用any运算符。 请注意,此解决方案假设params[:keywords]只是一个字符串,如apples或其他。它也匹配完全匹配,而不是子串。

@users = User.where('? = ANY(keywords)', params[:keywords])

如果您需要使用ILIKE运算符,则必须使用

@users = User.where("array_to_string(names, ',') ILIKE ?", "%#{params[:keywords]}%")

或者如果你想要使用正则表达式

@users = User.where("array_to_string(names, ',') ~* ?", params[:keywords])