如何使用json自动生成rake迁移文件

时间:2015-01-20 15:26:23

标签: json migration rake

使用sqlite3,Rails 4.2.0。 运行rake db:migrate时出现以下错误。 问题是迁移文件具有以下内容:

t.json :blah并且应该有t.column :blah, :json

我的问题是,“如何让迁移文件正确自动生成?

我用它来生成迁移文件:

rails generate scaffold rails_app title:string blah:json

这会将t.json :blah放入迁移文件中。

> ubuntu@host:~/rails_app$ rake db:migrate
> == 20150119183550 CreatePolreqs: migrating ====================================
> -- create_table(:rails_app) rake aborted! StandardError: An error has occurred, this and all later migrations canceled:
> 
> undefined method `json' for
> #<ActiveRecord::ConnectionAdapters::TableDefinition:0x007f8466ab9680>/home/ubuntu/rails_app/db/migrate/20150119183550_create_rails_app.rb:6:in
> `block in change'
> /home/ubuntu/rails-app/db/migrate/20150119183550_create_rails_app.rb:3:in
> `change' NoMethodError: undefined method `json' for
> #<ActiveRecord::ConnectionAdapters::TableDefinition:0x007f8466ab9680> /home/ubuntu/rails_app/db/migrate/20150119183550_create_rails_app.rb:6:in
> `block in change'
> /home/ubuntu/rails_app/db/migrate/20150119183550_create_rails_app.rb:3:in
> `change' Tasks: TOP => db:migrate (See full trace by running task with
> --trace)

1 个答案:

答案 0 :(得分:0)

sqlite3适配器不支持json列(尚未)。

postgres支持:http://guides.rubyonrails.org/v4.2/active_record_postgresql.html

要切换数据库,请更新Gemfile并替换

gem 'sqlite3' 

gem 'pg'

切换数据库的另一种方法是使用&#39;文本&#39;列而不是&#39; json&#39;,但这需要自己序列化json并且你不会获得postgres提供的任何花哨的json查询运算符。

看起来sqlite3最近添加了对json列的支持,所以scite-ruby适配器可能在将来的某个时候支持这个:

http://www.infoq.com/news/2015/10/sqlite-39-released

https://github.com/sparklemotion/sqlite3-ruby