1

在使用 Rails 3.2 和 Postgres hstore 构建应用程序时,我遇到了非 ActiveRecord 模型的问题(目前使用 ActiveAttr,但可以使用其他选项)。简而言之,我需要查询数据库以检索 hstore 中的一组键。据我所知,这只能通过直接的、非 ActiveRecord::Query 语句来实现。

我当前的代码如下所示:

def self.keys(query)
  # FIXME Need to determine how to sanitize input
  sql = "SELECT DISTINCT key FROM ( SELECT skeys(data) AS key from \"products\" ) AS keys"
  if(query && !query.empty?)
    sql += " WHERE lower(key) LIKE '%#{query.downcase}%'"
  end
  ActiveRecord::Base.connection.select_values(sql)
end

这有效,但不会清理 input query。如果我尝试创建一个数组并将关键行更改为sql += " WHERE lower(key) LIKE ?"我的日志中出现此错误:

Could not log "sql.active_record" event. NoMethodError: undefined method `squeeze' for #<Array:0x007fd9968704e8>
TypeError: wrong argument type Array (expected String): ["SELECT DISTINCT key FROM ( SELECT skeys(data) AS key from \"products\" ) AS keys WHERE lower(key) LIKE ?", "%o%"]

是否可以在外部调用适当的清理方法,或者至少在我的模型中执行相同的逻辑?

4

0 回答 0