Rails 3: migration error when using json as a column type in an ActiveRecord backed by Postgres

postgresql, ruby-on-rails

Solution

Change your migration like

class CreateThing < ActiveRecord::Migration
  def change
    create_table :things do |t|
      t.integer :user_id
      t.column :json_data, :json   # Edited
      t.timestamps
    end
    add_index :things, :user_id
  end
end

And by default `rake db` tasks will look into schema.rb( which wont be the case for postgres) so in application.rb change it to

config.active_record.schema_format = :sql

Problem

I am running Rails 3.2.17 and Postgres 9.3.4. I created a new ActiveRecord model using "rails generate" and one of the column types is json. My intention is to use the json column type in Postgres. The db migration contains this code: ``` class CreateThing < ActiveRecord::Migration def change create_table :things do |t| t.integer :user_id t.json :json_data t.timestamps end add_index :things, :user_id end end ``` When I try to migrate with "rake db:migrate" I get this error: ``` -- create_table(:things) rake aborted! StandardError: An error has occurred, this and all later migrations canceled: undefined method `json' for #<ActiveRecord::ConnectionAdapters::PostgreSQLAdapter::TableDefinition:0x007fea3d465af8>/Users/../db/migrate/20140425030855_create_things.rb:7:in `block in change' /Library/Ruby/Gems/2.0.0/gems/activerecord-3.2.17/lib/active_record/connection_adapters/abstract/schema_statements.rb:160:in `create_table' ``` Is this the right way to add a json column to an ActiveRecord? I cannot find any documentation or examples. Thanks!

Original source