Always declare columns for SQL query in Rails
When ignoring a column in an ActiveRecord query you'll receive a query that declares the column names of the table explicitly versus using *
.
What if you do not want to ignore a column to get this functionality? Rails 7 will introduce an ActiveRecord class attribute to do just this.
class Procedure < ApplicationRecord
self.enumerate_columns_in_select_statements = true
end
Procedure.all
=> SELECT "procedures"."id", "procedures"."name", "procedures"."created_at", "procedures"."updated_at" FROM "procedures"
When enumerate_columns_in_select_statements
is set to true, ActiveRecord SELECT queries will always include column names explicitly over using a wildcard. This change was introduced to provide consistency in query generation and avoid prepared statment issues.
Note: it can be declared at the app configuration level as well.
module MyApp
class Application < Rails::Application
config.active_record.enumerate_columns_in_select_statements = true
end
end
With that change, all ActiveRecord queries will avoid the wildcard.
Tweet