I’ve already asked about this on StackOverflow with no luck on answer - Rails 3.2 force prepared statements - Stack Overflow
Simplified Case:
Hotel.find(1) - use prepared statement
SELECT “hotels”.* FROM “hotels” WHERE “hotels”.“id” = $1 LIMIT 1 [[“id”, 1]]
Hotel.where(id: 1) - without prepared statement
SELECT “hotels”.* FROM “hotels” WHERE “hotels”.“id” = 1
Hotel.where(Hotel.arel_table[:id].eq(1)) - without prepared statement
SELECT “hotels”.* FROM “hotels” WHERE “hotels”.“id” = 1
Hotel.where(‘id = :id’, id: 1)
- without prepared statement
SELECT “hotels”.* FROM “hotels” WHERE (id = 1)
How to force rails to use prepared statements? May be not in all cases, but at least with arel_table.