Schema.rb显示由于以下NoMethodError#undefined方法`[]'为nil:NilClass,因此无法转储表“progress”

时间:2016-08-15 01:06:11

标签: ruby-on-rails ruby ruby-on-rails-4 carrierwave

我正在尝试向我的应用添加带有 Carrierwave following the documentation的多图片上传器。

通常我的schema.rb看起来像这样

  ActiveRecord::Schema.define(version: 20160814232416) do

   create_table "progresses", force: :cascade do |t|
     t.string   "title"
     t.string   "date"
     t.text     "content"
     t.datetime "created_at", null: false
     t.datetime "updated_at", null: false
    end
  end

当我跑步时:

rails g migration add_images_to_progresses images:jsonrake db:migrate

我的架构改变并显示出奇怪的东西...... 这是Sqlite3或Pg的问题吗?我该怎么办?

ActiveRecord::Schema.define(version: 20160815005123) do

  # Could not dump table "progresses" because of following NoMethodError
  #undefined method `[]' for nil:NilClass

end

1 个答案:

答案 0 :(得分:0)

我尝试对SQLite和PostgreSql使用相同的代码。在SQLite中没有数据类型" JSON"可用,所以它会抛出错误。当我在PostgreSQL中尝试相同时,它起作用了。

ActiveRecord::Schema.define(version: 20160815070637) do 
  enable_extension "plpgsql"
  create_table "progresses", force: :cascade do |t|
    t.string   "title"
    t.string   "date"
    t.text     "content"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.json     "images"
  end

end

如果您想使用SQLite,则必须从JSON生成一个字符串,然后将该字符串作为常规字符串保存在数据库中。

我更喜欢使用支持JSON数据类型的PostgreSQL。