2015-01-20 4 views
3

Использование sqlite3, Rails 4.2.0. Ошибка при запуске rake db:migrate. Проблема заключается в том, что файл миграции имеет следующее: «Как получить файл миграции автогенерацию правильно»Как сгенерировать файл миграции рейка с помощью json

t.json :blah и должны иметь t.column :blah, :json

Мой вопрос,

Я использовал это для создания файла миграции:

rails generate scaffold rails_app title:string blah:json 

Это ставит t.json :blah в migratio n файл.

> [email protected]:~/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) 
+0

Я encouter тот же вопрос. кажется, что файл миграции всегда записывает t.json: blah обратно в файл схемы; но для файла схемы нужен формат t.column: blah,: json. возможно, это требует, чтобы команда rails переписывала, как файл схемы обновляется. любое решение/обходное решение? – fuyi

ответ

0

Адаптер sqlite3 не поддерживает колонки json (пока).

Поддерживается postgres: http://guides.rubyonrails.org/v4.2/active_record_postgresql.html.

Для переключения баз данных, обновить Gemfile и заменить

gem 'sqlite3' 

с

gem 'pg' 

Альтернативой переключения баз данных будет использовать столбец «текст» вместо «JSON», но это потребовал бы сериализации json самостоятельно, и вы не получите ни одного из удобных json-запросов, предоставляемых postgres.

Похоже sqlite3 недавно добавлена ​​поддержка JSon столбцов так что это может быть поддержан адаптером SQLite-рубинового в какой-то момент в будущем:

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

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

Смежные вопросы