blazer icon indicating copy to clipboard operation
blazer copied to clipboard

Columns defined with default: [], array: true show as { } instead?

Open 1990eam opened this issue 2 years ago • 1 comments

I'm sorry if this is not a bug but I couldn't find the corresponding section in the docs.

ruby 2.7.6 rails 6.0.4.7

I created a new table with a single column of type text, default: [] and array: true

  def change
    create_table :foo do |t|
      t.text :bar, array: true, default: []
    end
  end

schema.rb shows the right information:

  create_table "foo", force: :cascade do |t|
    t.text "bar", default: [], array: true
  end

Blazer schema shows:

foos bar | ARRAY

But in Blazer the queried column shows as {} when empty instead of [].

When populated, instead of showing as an array of strings ["value1", "value2"] it shows as {value1, value2} .

The same query using ActiveRecord methods via console returns the right format for the stored data:

foo = Foo.first
foo.bar
=> ["value1", "value2"]

Is this a bug or intentional?

1990eam avatar Aug 03 '22 18:08 1990eam

Hey @1990eam, arrays in Postgres use curly braces, which is why it's showing up that way. Active Record is deserializing it to a Ruby array in the example above. However, I'm hesitant to make the output Ruby-specific.

ankane avatar Aug 03 '22 21:08 ankane