我在Ruby on Rails 3中使用Rspec(2.11.0)和FactoryGirl(4.0.0)进行TDD/BDD.我有一个类别模型的工厂:
FactoryGirl.define "Category" do
factory :category do
name "Foo"
end
end
Run Code Online (Sandbox Code Playgroud)
如果我删除,创建然后在测试环境中迁移数据库我收到此错误:
rake aborted!
Could not find table 'categories'
Run Code Online (Sandbox Code Playgroud)
出现此问题的原因是FactoryGirl期望表已经存在(出于某些奇怪的原因).如果我从我的rails应用程序中删除spec文件夹并且这样做db:migrate,它可以工作.此外,如果我factory-girl-rails从我的标记,Gemfile因为:require => false它也有效(然后我必须发表评论,以便运行rspec).
我在这里找到了一些关于这个问题的信息:https://github.com/thoughtbot/factory_girl/issues/88
我有什么不对劲吗?如何在db:migration任务中"通过"FactoryGirl阶段?
我用以下内容编写了一个迁移:
class CreateTableSomeTable < ActiveRecord::Migration[5.1]
def change
create_table :some_tables do |t|
t.references :user, foreign_key: true
t.references :author, references: :user, foreign_key: true
t.text :summary
end
end
end
Run Code Online (Sandbox Code Playgroud)
这是一个创建数据库表的基本迁移.但是:当我运行rails db:migrate一个非常奇怪的错误消息时中止迁移:
Mysql2 ::错误:表'my_database.some_tables'不存在:显示来自'some_tables'的完整字段
好像错误是说它无法创建表,因为表确实存在,这没有意义.
我看过并试过的事情:
bundle确保所有的宝石都安装好了schema.rb文件,用另一个副本中的数据重新创建数据库,然后我跑去rake db:schema:dump重新创建schema.rb文件.我试图再次运行迁移,但仍然遇到了同样的错误.我使用rails 5.1.1以及mysql2 0.4.6
有关如何让迁移运行的任何提示?