我正在运行Rails 3.2.17和Postgres 9.3.4.我使用"rails generate"创建了一个新的ActiveRecord模型,其中一种列类型是json.我的意图是在Postgres中使用json列类型.

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

当我try 使用"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'

这是向ActiveRecord添加json列的正确方法吗?我找不到任何文档或示例.谢谢

推荐答案

改变你的迁移方式

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个任务将查看模式.rb(博士后不适用)在申请中也是如此.把它改成

config.active_record.schema_format = :sql

Postgresql相关问答推荐

Trunc函数不删除小数

一列引用两个不同的表

无法在timscaleDb中创建Hypertable

在PostgreSQL中是否有与SQLite R*Tree类似功能?

有没有一种方法可以在参数中添加密码,并在批处理文件中需要时自动获取密码?

在PostGreSQL中获取最近日期的项目

连接到 PostgreSQL 时没有属性执行错误

找出两个表之间的差异

gorm 创建并返回值 many2many

替代在 PostgreSQL 函数中嵌套正则表达式替换?

如何防止 PDO 将问号解释为占位符?

PostgreSQL比较两个jsonb对象

Hibernate 将用户模型保存到 Postgres

postgresql中的外键可以被触发器违反

如何在 PostgreSQL 中截断日期?

PostgreSQL:根据排序顺序仅 Select 每个 id 的第一条记录

获取 PostgreSQL 中当前正在运行的查询的参数

如何使用 Django Migrations 重新创建已删除的表?

判断materialized视图的上次刷新时间

重命名 Amazon RDS 主用户名