我在rails 4应用程序上有以下代码
query= OrderHeader.select("orders_header.id,
orders_header.created_at").where("shop_id=#{shop_id} and
customer_id=#{customer_id} and hash_key like
'#{current_hash_key}'").order("id desc")
if query.nil?
return true # no duplicates found
end
if (query.count>0) # duplicates found
#nothing
end
而我得到了错误
错误
从orders\u header
WHERE中选择COUNT(orders\u header.id,orders\u header.created\u at)(shop\u id=99,customer\u id=1,散列\u key,如'539de64e8793790430052bc861dd0ff521334e32')
MySQL2::Error:您有一个错误,在您的SQL语法;检查手册,对应于您的MySQL服务器版本的正确语法使用附近'orders_header.created_at)从orders_header
WHERE(shop_id=99和customer_在第1行:选择计数(orders_header.id,orders_header.created_at)从orders_header
WHERE(shop_id=99和customer_id=1和hash_key像'539de64e8793790430052bc861dd0ff521334e32')
你最近升级到rails 4.1了吗?在这种情况下,这里提到的已知问题可能https://github.com/rails/rails/issues/15138
你需要对字符串内的表名使用复数形式,orders_headers.id
而不是orders_header.id
,等等,也为了避免sql注入,你应该使用传递给字符串的params而不是把字符串内的参数,例如:
where("shop_id=?", shop_id)
所以为了清理你的where语句,它可能是这样的
where(shop_id: shop_id, customer_id: customer_id).where("hash_key like '?'",current_hash_key)