Question

This is my first post here so go easy. I am trying to build my first app in Rails 3.2.1. I am trying to generate a scaffold for Paint using the following terminal command:

rails generate scaffold Paint paint_family:string paint_hex:array paint_available:boolean     paint_location:integer paint_quantity:integer paint_additional_info:text

But when I try to migrate I get the following error:

undefined method `array' for #<ActiveRecord::ConnectionAdapters::TableDefinition:0x007fbd8bdb1c58>

Here is the migration record:

  class CreatePaints < ActiveRecord::Migration
  def change
    create_table :paints do |t|
    t.string :paint_family
    t.array :paint_hex
    t.boolean :paint_available
    t.integer :paint_location
    t.integer :paint_quantity
    t.text :paint_additional_info

    t.timestamps
 end
 end

end

I cannot for the life of me figure out why this is. But that's because I don't know what I'm doing. Any advice/help would be greatly appreciated.

Was it helpful?

Solution

The problem is this:

t.array :paint_hex

There is no column type called array. You can use string or text and then serialize the value if you really want to save an array.

class Paint < ActiveRecord::Base
  serialize :paint_hex
end

Just by the way: Prefixing all your attribute names with paint_ is a pretty uncommon naming scheme for a rails application.

OTHER TIPS

In Rails 4 and using PostgreSQL you can actually use an array type in the DB:

Migration:

class CreateSomething < ActiveRecord::Migration
  def change
    create_table :something do |t|
      t.string :some_array, array: true, default: []
      t.timestamps
    end
  end
end

Array its not a valid database type. You cant create a column with type array.

There is some ways to store an array in a field. Check the serialize method. You must declare the column of type text and the in the class specify that the columns serializas an object of type array

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top