This blog is part of our Rails 6 series. Rails 6.0 was recently released.

Rails 6 raises ActiveModel::MissingAttributeError when update_columns is used with a non-existing attribute. Before Rails 6, update_columns raised an ActiveRecord::StatementInvalid error.

Rails 5.2

>> User . first . update_columns ( email: 'amit@bigbinary.com' ) SELECT "users" . * FROM "users" ORDER BY "users" . "id" ASC LIMIT $1 [[ "LIMIT" , 1 ]] UPDATE "users" SET "email" = $1 WHERE "users" . "id" = $2 [[ "email" , "amit@bigbinary.com" ], [ "id" , 1 ]] => Traceback ( most recent call last ): 1 : from ( irb ): 8 ActiveRecord :: StatementInvalid ( PG :: UndefinedColumn : ERROR : column "email" of relation "users" does not exist ) LINE 1 : UPDATE "users" SET "email" = $1 WHERE "users" . "id" = $2 ^ : UPDATE "users" SET "email" = $1 WHERE "users" . "id" = $2

Rails 6.0.0.beta2

>> User . first . update_columns ( email: 'amit@bigbinary.com' ) SELECT "users" . * FROM "users" ORDER BY "users" . "id" ASC LIMIT ? [[ "LIMIT" , 1 ]] Traceback ( most recent call last ): 1 : from ( irb ): 1 ActiveModel :: MissingAttributeError ( can ' t write unknown attribute `email` )

Here is the relevant commit.