Search code examples
arraysruby-on-rails-3scaffolddbmigrate

Rails 3 => Undefined method 'array' when I try to rake db:migrate


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.


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.