在我的用户模型上运行一条简单的语句,但不断得到关于操作符与任何给定参数都不匹配的错误。我以前从来没有遇到过这样的事情,我不知道如何处理它。我知道我可能需要添加类型转换,但在我的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%')):谢谢!
发布于 2017-06-18 01:07:39
如果要在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])https://stackoverflow.com/questions/44606850
复制相似问题