Rails 3: ошибка миграции при использовании json в качестве типа столбца в ActiveRecord, поддерживаемая Postgres

Я запускаю Rails 3.2.17 и Postgres 9.3.4. Я создал новую модель ActiveRecord, используя "rails generate", а один из типов столбцов - json. Мое намерение - использовать тип столбца json в Postgres.

Миграция db содержит этот код:

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

Когда я пытаюсь выполнить миграцию с помощью "rake db: migrate", я получаю эту ошибку:

-- 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'

Это правильный способ добавить столбец json в ActiveRecord? Я не могу найти никакой документации или примеров. Спасибо!

Ответ 1

Измените миграцию, например

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

И по умолчанию rake db задачи будут рассмотрены в schema.rb(который не будет иметь место для postgres), поэтому в application.rb измените его на

config.active_record.schema_format = :sql

Ответ 2

Задайте следующее в application.rb

config.active_record.schema_format = :sql

Затем вместо schema.rb будет использоваться struct.sql для создания базы данных с нуля. Дополнительная информация - https://github.com/diogob/activerecord-postgres-hstore