Quote a SQL Value in Rails
If you saw my last post about Geocoding, you'll notice that the value passed to the geocode sql function is an address. To properly pass that value, we need to make sure that we quote it for SQL land.
❌ Bad
ActiveRecord::Base.connection.execute(<<~SQL)
select
rating
from geocode('#{address}', 1)
SQL
Passing a mundane address like 100 O'Connel Ave will cause the above to throw an error in the database
But if we use the quote function from ActiveRecord, we properly quote our strings for SQL:
✅ Better
quoted_address = ActiveRecord::Base.connection.quote(address)
ActiveRecord::Base.connection.execute(<<~SQL)
select
rating
from geocode(#{quoted_address}, 1)
SQL
Doing this ensures that we mitigate SQL Injection attacks and we properly account for things like single quotes in our values.
https://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/Quoting.html#method-i-quote
Tweet