Skip to content

Adding array enum column in same migration as enum creation fails with "TypeError: can't quote Array" #58

Description

@anaulin

Describe the bug
The following migration:

def change
  create_enum :product_type, %w[one-off subscription]

  add_column :products, :types, :product_type, array: true, default: []
end

Fails with the error:

TypeError: can't quote Array

However, separating the create_enum into its own migration, running it, and then separately running a migration with add_column succeeds. (Running the two migrations together also fails.)

I did some exploration, and it seems the problem is that Rails doesn't know the type of the :types column when it is trying to serialize the default value for that column. If I rewrite the above migration as:

  create_enum :product_type, %w[one-off subscription]

  add_column :products, :types, :product_type, array: true

  Product.reset_column_information
  change_column_default :products, :types, default: []

This fails with the errors:

unknown OID 697877: failed to recognize type of 'types'. It will be treated as String.
rails aborted!
StandardError: An error has occurred, this and all later migrations canceled:

can't quote Hash

Expected behavior
I would expect this migration to work without having to first fully apply the create_enum line.

Context (please complete the following information):

  • OS: Debian GNU/Linux 11 (bullseye)
  • Rails 6.1.6.1
  • activerecord-postgres_enum (2.0.1)
  • postgres:13.5

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions