Rails 4:schema.db显示"Could not dump table "事件" because of following NoMethodError# undefined method `



我一直在开发一个Rails 4.0应用程序,该应用程序使用sqlite(Rails开发环境的默认值)来处理事件(黑客马拉松),它有一个父模型Event,可以有许多Press_Blurbs。

首先,我运行了一些脚手架生成器,这些生成器创建了一些迁移,我运行起来似乎没有问题:

class CreateEvents < ActiveRecord::Migration
  def change
    create_table :events do |t|
      t.string :city
      t.string :theme
      t.datetime :hackathon_start
      t.datetime :hackathon_end
      t.datetime :show_start
      t.datetime :show_end
      t.text :about
      t.string :hack_rsvp_url
      t.string :show_rsvp_url
      t.timestamps
    end
  end
end
class CreatePressBlurbs < ActiveRecord::Migration
  def change
    create_table :press_blurbs do |t|
      t.string :headline
      t.string :source_name
      t.string :source_url
      t.string :logo_uri
      t.timestamps
    end
  end
end

然后我给模型添加了一些关系:

class Event < ActiveRecord::Base
  has_many :press_blurbs
end
class PressBlurb < ActiveRecord::Base
  belongs_to :event
end

并添加/运行了一个迁移以添加表引用:

class AddEventRefToPressBlurbs < ActiveRecord::Migration
  def change
    add_column :press_blurbs, :event, :reference
  end
end

然而,当我看到schema.db时,我看到的不是表定义:

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

schema.rb中显示的其他不相关的表非常好,但这些表没有。知道发生了什么事吗?

我认为上次迁移是错误的。我会把它改成这个:

class AddEventRefToPressBlurbs < ActiveRecord::Migration
  def change
    add_reference :press_blurb, :event
  end
end

不幸的是,您的数据库可能处于不稳定状态,因为它的列类型无效(即没有"引用"列类型,但sqlite还是创建了它)。希望它只是一个开发数据库,所以您可以删除它并重新开始。

以防万一这对某人有所帮助。我在sqlite-dev-db上做这件事,如上所述,在我所有的实验迁移中,它可能处于不稳定的状态。通过删除sqlite文件,重新创建并运行所有迁移,现在就可以了。

相关内容

  • 没有找到相关文章

最新更新