在我的用户模型上运行一个简单的语句,但不断获得有关运算符的错误,这些错误与任何给定的参数都不匹配。我以前从来没有碰到这样的事情,也不知道如何处理它。我知道我必须添加类型转换,但在我的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%')):
谢谢!
答案 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])