我一直在使用带有sqlite(Rails开发环境的默认设置)的Rails 4.0应用程序来处理事件(黑客马拉松),它有一个父模型,事件,可以有很多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中显示完全正常,但这些表格没有。知道发生了什么事吗?
答案 0 :(得分:20)
我认为您上一次迁移是错误的。我会改变它:
class AddEventRefToPressBlurbs < ActiveRecord::Migration
def change
add_reference :press_blurb, :event
end
end
不幸的是,您的数据库可能处于不稳定的状态,因为它的列类型无效(即没有'引用'列类型,但sqlite仍然使用它)。希望它只是一个开发数据库,所以你可以删除它并重新开始。
答案 1 :(得分:0)
以防这有助于某人。我是在一个sqlite dev db上做的,如上所述,我的所有实验性迁移都可能处于不稳定的状态。通过删除sqlite文件,重新创建并运行所有迁移,现在已经很好了。